WiseRoute

Package: inet.networklayer.wiseroute

WiseRoute

simple module

Wiseroute is a simple loop-free routing algorithm that builds a routing tree from a central network point, designed for sensor networks and convergecast traffic.

The sink (the device at the center of the network) broadcasts a route building message. Each network node that receives it selects the sink as parent in the routing tree, and rebroadcasts the route building message. This procedure maximizes the probability that all network nodes can join the network, and avoids loops. Parameter sinkAddress gives the sink network address, rssiThreshold is a threshold to avoid using bad links (with too low RSSI values) for routing, and routeFloodsInterval should be set to zero for all nodes except the sink. Each routeFloodsInterval, the sink restarts the tree building procedure. Set it to a large value if you do not want the tree to be rebuilt.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Used in compound modules

Name Type Description
WiseRouteNetworkLayer compound module

This module provides a simple network layer.

Extends

Name Type Description
NetworkProtocolBase simple module

Module base for different network protocols.

Parameters

Name Type Default value Description
interfaceTableModule string
headerLength int 96b

length of the network packet header (in bits)

debug bool false

debug switch

trace bool false
useSimTracer bool false
sinkAddress string

sink node address

rssiThreshold double -50 dBm

RSSI threshold for route selection

routeFloodsInterval double 0 s

If set to zero, this node does not initiates route tree building. If set to a value larger than zero, this nodes periodically initiates route tree building.

arpModule string

The path to the ARP module

Properties

Name Value Description
display i=block/fork
class WiseRoute

Gates

Name Direction Size Description
transportIn input
transportOut output
queueIn input
queueOut output

Signals

Name Type Unit
packetReceivedFromUpper cPacket
packetReceivedFromLower cPacket
packetDropped cPacket
packetSentToLower cPacket
packetSentToUpper cPacket

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::arrivedarrived
MessageDispatcherinet::MessageDispatcher::handleRegisterProtocolhandleRegisterProtocol
MessageDispatcherinet::MessageDispatcher::handleRegisterServicehandleRegisterService
InterfaceTableinet::InterfaceTable::findFirstNonLoopbackInterfacefindFirstNonLoopbackInterface

Called methods (observed)

functioninfocall from
inet::WiseRoute::handleRegisterProtocolhandleRegisterProtocolMessageDispatcher
inet::WiseRoute::handleRegisterServicehandleRegisterServiceMessageDispatcher

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
queueInPacket0EthernetEncapsulationDispatchProtocolReq, InterfaceInd, MacAddressInd, PacketProtocolTag
transportInPacket0PingAppDispatchProtocolReq, L3AddressReq, PacketProtocolTag, SocketReq
transportInPacket0EchoProtocolDispatchProtocolReq, L3AddressReq, PacketProtocolTag
transportInRequest1L3SocketBindCommandPingAppDispatchProtocolReq, SocketReq

Outgoing messages (observed)

gatemsgkindctrldestModuletags
queueOutPacket0EthernetEncapsulationDispatchProtocolInd, DispatchProtocolReq, InterfaceReq, MacAddressReq, PacketProtocolTag, L3AddressReq?, SocketReq?
transportOutPacket0PingAppDispatchProtocolReq, InterfaceInd, L3AddressInd, MacAddressInd, NetworkProtocolInd, PacketProtocolTag, SocketInd
transportOutPacket0EchoProtocolDispatchProtocolReq, InterfaceInd, L3AddressInd, MacAddressInd, NetworkProtocolInd, PacketProtocolTag

Packet operations (observed)

chunkTypepacketAction
WiseRouteHeaderinsertAtFront, peekAtFront, popAtFront, removeAtFront

Shared Tagging operations (observed)

tagTypetagAction
clearTags
DispatchProtocolIndaddTagIfAbsent
DispatchProtocolReqaddTagIfAbsent
InterfaceReqaddTagIfAbsent
L3AddressIndaddTagIfAbsent, getTag
L3AddressReqfindTag
MacAddressReqaddTagIfAbsent
NetworkProtocolIndaddTagIfAbsent
PacketProtocolTagaddTagIfAbsent, getTag
SocketIndaddTagIfAbsent
SocketReqgetTag

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatafindTag
inet::Ipv6InterfaceDatafindTag
inet::NextHopInterfaceDatafindTag

Source code

//
// Wiseroute is a simple loop-free routing algorithm that
// builds a routing tree from a central network point, designed
// for sensor networks and convergecast traffic.
//
// The sink (the device at the center of the network) broadcasts
// a route building message. Each network node that receives it
// selects the sink as parent in the routing tree, and rebroadcasts
// the route building message. This procedure maximizes the probability
// that all network nodes can join the network, and avoids loops.
// Parameter sinkAddress gives the sink network address,
// rssiThreshold is a threshold to avoid using bad links (with too low
// RSSI values) for routing, and routeFloodsInterval should be set to
// zero for all nodes except the sink. Each routeFloodsInterval, the
// sink restarts the tree building procedure. Set it to a large value
// if you do not want the tree to be rebuilt.
//
simple WiseRoute extends NetworkProtocolBase like INetworkProtocol
{
    parameters:
        int headerLength @unit(b) = default(96b); // length of the network packet header (in bits)

        // debug switch
        bool debug = default(false);
        bool trace = default(false);
        bool useSimTracer = default(false);

        // sink node address
        string sinkAddress;
        // the sink directs the tree building procedure with periodic floods.
        // iterationDelay is the period between two floods.

        // RSSI threshold for route selection
        double rssiThreshold @unit(dBm) = default(-50 dBm);

        // If set to zero, this node does not initiates route tree building.
        // If set to a value larger than zero, this nodes periodically initiates route tree building.
        double routeFloodsInterval @unit(s) = default(0 s);

        string arpModule; // The path to the ARP module

        @display("i=block/fork");
        @class(WiseRoute);
}

File: src/inet/networklayer/wiseroute/WiseRoute.ned