Overview
Scalability
Mobility
Benchmarks
Location Tracking
Integration
Licensees
Request White Paper

Contact

 

Integration

The OrderOne Networks protocol was designed from the ground up for easy integration. It has no OS calls of any sort built in. Instead it hooks to your OS or application via approximately 100 lines of 'C' code provided by OrderOne Networks.

Since the protocol was written entirely in 'C' it may be compiled for virtually any 32bit CPU and OS combination. It uses no floating point math and is completely endian independent. The compiled size of the protocol library depends somewhat on the CPU/OS combination but is typically around 200K.

Since the runtime memory and CPU requirements are adjustable,
the OrderOne Networks protocol may run on anything from a low power embedded device to a desktop or server.

Pseudo Code

The following pseudo code illustrates how to integrate the protocol into an OS or simulation. The OON protocol also supports an event driven model without the sleep or the loop. Additionally, there is an internal routing table that may be used instead of updating an external routing table.

The function parameters are mainly omitted, but the order and the function names are correct. OON_* are OON protocol functions. OS_* are functions provided by you, a simulation or the OS.


/* create an instance of the protocol */
OON_createNode(…);

/* set the name of the node */
OON_setNodeName(OS_GetIPNameOfNode(),…);

/* create an interface in the protocol that corresponds
   to an actual radio or wired interface on your device.
   here is where the packet rate is specified */

OON_createInterface(DEF_MSBetweenPackets,…);

while (1) {

    /* process all OON control packets
       received on the interface */

    while (OS_AnyIncomingProtocolPackets()) {

        /* get a pointer to the incoming packet */
        _uint8 *pIncomingPacket =
           OS_GetPointerToProtocolPacket();

        /* process the incoming packet */
        _uint32 uiNeighborID =
           OON_processPacket(pIncomingPacket,…);

        /* update the cost to the neighbor */
        OON_setCost(uiNeighborID,
                    OS_DetermineCostToNeighbor(…));

    }

    /* do we need to generate a control packet? */
    if (OON_isGenerateControlPacket(…)) {

        /* create a buffer to put the packet in */
        _uint8 uiBuffer[DEF_MaxPacketSize];

        /* generate the packet */
        _uint32 uiPacketSize =
           OON_generatePacket(&uiBuffer,
                              DEF_MaxPacketSize,…);

        /* send it out */
        OS_SendPacketOutOnInterface(&uiBuffer,
                                    uiPacketSize);

        /* have any routes changed? */
        IP_Addr DestIP;
        IP_Addr NextHopIP;
        while (OON_routeChanges(&DestIP,…)) {

            /* get the route */
            OON_getRoute(DestIP,NextHopIP,…);

            /* update the route table */
            OS_UpdateRouteTable(&DestIP,&NextHopIP);

        }
    }

    /* give up the time slice */
    Sleep(10ms);
}

And yes, this really is all you need to start building large, mobile mesh networks.


home | scalability | mobility | benchmarks | location tracking | integration | licensees | request white paper | contact