Dymo

Package: inet.routing.dymo

Dymo

simple module

This module provides Dynamic MANET On-demand (Dymo also known as AODVv2) Routing based on the IETF draft at http://tools.ietf.org/html/draft-ietf-manet-dymo-24.

Module parameters are copied from the IETF draft and renamed for consistency with INET naming conventions. Some parameters are not yet implemented.

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
DymoRouter compound module (no description)

Parameters

Name Type Default value Description
interfaceTableModule string

context parameters

routingTableModule string absPath("^.ipv4.routingTable")
networkProtocolModule string absPath("^.ipv4.ip")
clientAddresses string "10.10.0.0/24 10.20.0.0"

1. Dymo parameter group

useMulticastRREP bool false

USE_MULTICAST_RREP

interfaces string "*"

string DEFAULT_METRIC_TYPE = default("HOP_COUNT");

activeInterval double 5s

2. Dymo parameter group

maxIdleTime double 200s

MAX_IDLETIME

maxSequenceNumberLifetime double 300s

MAX_SEQNUM_LIFETIME

routeRREQWaitTime double 2s

ROUTE_RREQ_WAIT_TIME

rreqHolddownTime double 10s

double UNICAST_MESSAGE_SENT_TIMEOUT @unit(s) = default(1s);

maxHopCount int 20

3. Dymo parameter group

discoveryAttemptsMax int 3

string MAX_METRIC = default(""); double MAXTIME;

appendInformation bool true

4. Dymo parameter group

bufferSizePackets int -1

BUFFER_SIZE_PACKETS

bufferSizeBytes int -1B

BUFFER_SIZE_BYTES double CONTROL_TRAFFIC_LIMIT

maxJitter double 10ms

Dymo extension parameters

sendIntermediateRREP bool true
minHopLimit int 5
maxHopLimit int 10

Properties

Name Value Description
class dymo::Dymo

properties

display i=block/routing

Gates

Name Direction Size Description
ipIn input
ipOut output

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
PacketJitterTimer0PacketJitterTimer
RreqBackoffTimer0RreqBackoffTimer
RreqWaitRrepTimer0RreqWaitRrepTimer

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::arrivedarrived
MessageDispatcherinet::MessageDispatcher::handleRegisterProtocolhandleRegisterProtocol
InterfaceTableinet::InterfaceTable::interfaceChangedinterfaceChanged
Igmpv2inet::Igmpv2::receiveSignalipv4MulticastGroupJoined
Ipv4inet::Ipv4::registerHookregisterHook()
Ipv4inet::Ipv4::reinjectQueuedDatagramreinjectDatagram()
Ipv4RoutingTableinet::Ipv4RoutingTable::addRouteaddRoute(...)
Ipv4RoutingTableinet::Ipv4RoutingTable::findBestMatchingRoutefindBestMatchingRoute(%u.%u.%u.%u)
Ipv4RoutingTableinet::Ipv4RoutingTable::isLocalAddressisLocalAddress(%u.%u.%u.%u)
Ipv4RoutingTableinet::Ipv4RoutingTable::removeRouteremoveRoute(...)
Ipv6inet::Ipv6::registerHookregisterHook()
Ipv6RoutingTableinet::Ipv6RoutingTable::doLongestPrefixMatchdoLongestPrefixMatch(%s)
Ipv6RoutingTableinet::Ipv6RoutingTable::isLocalAddressisLocalAddress(%s)
NextHopForwardinginet::NextHopForwarding::registerHookregisterHook()
NextHopForwardinginet::NextHopForwarding::reinjectQueuedDatagramreinjectDatagram()
NextHopRoutingTableinet::NextHopRoutingTable::addRouteaddRoute(...)
NextHopRoutingTableinet::NextHopRoutingTable::findBestMatchingRoutefindBestMatchingRoute(%s)
NextHopRoutingTableinet::NextHopRoutingTable::isLocalAddressisLocalAddress(%s)
NextHopRoutingTableinet::NextHopRoutingTable::removeRouteremoveRoute(...)

Called methods (observed)

functioninfocall from
inet::dymo::Dymo::datagramLocalOutHookdatagramLocalOutHookIpv4, Ipv6, NextHopForwarding
inet::dymo::Dymo::datagramPreRoutingHookdatagramPreRoutingHookIpv4, Ipv6, NextHopForwarding
inet::dymo::Dymo::handleOperationStagehandleOperationStageScenarioManager
inet::dymo::Dymo::receiveSignallinkBrokenDcf

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
ipInPacket0Ipv4DispatchProtocolReq, DscpInd, EcnInd, ErrorRateInd, HopLimitInd, Ieee802SapInd, InterfaceInd, L3AddressInd, MacAddressInd, NetworkProtocolInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, TosInd, Ieee80211ChannelInd, Ieee80211ModeInd
ipInPacket0NextHopForwardingDispatchProtocolReq, ErrorRateInd, HopLimitInd, Ieee802SapInd, InterfaceInd, L3AddressInd, MacAddressInd, NetworkProtocolInd, PacketProtocolTag, SignalPowerInd, SignalTimeInd, SnirInd, Ieee80211ChannelInd, Ieee80211ModeInd

Outgoing messages (observed)

gatemsgkindctrldestModuletags
ipOutPacket0Ipv4DispatchProtocolReq, HopLimitReq, L3AddressReq, PacketProtocolTag, InterfaceReq?
ipOutPacket0Ipv6DispatchProtocolReq, HopLimitReq, L3AddressReq, PacketProtocolTag
ipOutPacket0NextHopForwardingDispatchProtocolReq, HopLimitReq, L3AddressReq, PacketProtocolTag, InterfaceReq?

Packet operations (observed)

chunkTypepacketAction
UdpHeaderinsertAtFront, popAtFront
DymoPacketpeekDataAt
RerrinsertAtBack
RrepinsertAtBack
RreqinsertAtBack

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolReqaddTag
HopLimitIndgetTag
HopLimitReqaddTag
InterfaceIndgetTag
InterfaceReqaddTag
L3AddressIndgetTag
L3AddressReqaddTag
NetworkProtocolIndfindTag
PacketProtocolTagaddTag

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatagetTagForUpdate
inet::Ipv6InterfaceDatagetTagForUpdate
inet::NextHopInterfaceDatagetTagForUpdate

Source code

//
// This module provides Dynamic MANET On-demand (Dymo also known as AODVv2) Routing
// based on the IETF draft at http://tools.ietf.org/html/draft-ietf-manet-dymo-24.
//
// Module parameters are copied from the IETF draft and renamed for consistency with
// INET naming conventions. Some parameters are not yet implemented.
//
simple Dymo like IManetRouting
{
    parameters:
        // properties
        @class("dymo::Dymo");
        @display("i=block/routing");

        // context parameters
        string interfaceTableModule;   // The path to the InterfaceTable module
        string routingTableModule = default(absPath("^.ipv4.routingTable"));
        string networkProtocolModule = default(absPath("^.ipv4.ip"));

        // 1. Dymo parameter group
        string clientAddresses = default("10.10.0.0/24 10.20.0.0"); // CLIENT_ADDRESSES
        bool useMulticastRREP = default(false); // USE_MULTICAST_RREP
        // string DEFAULT_METRIC_TYPE = default("HOP_COUNT");
        string interfaces = default("*"); // AODVv2_INTERFACES

        // 2. Dymo parameter group
        double activeInterval @unit(s) = default(5s); // ACTIVE_INTERVAL
        double maxIdleTime @unit(s) = default(200s); // MAX_IDLETIME
        double maxSequenceNumberLifetime @unit(s) = default(300s); // MAX_SEQNUM_LIFETIME
        double routeRREQWaitTime @unit(s) = default(2s); // ROUTE_RREQ_WAIT_TIME
        // double UNICAST_MESSAGE_SENT_TIMEOUT @unit(s) = default(1s);
        double rreqHolddownTime @unit(s) = default(10s); // RREQ_HOLDDOWN_TIME

        // 3. Dymo parameter group
        int maxHopCount = default(20); // MAX_HOPCOUNT
        // string MAX_METRIC = default("");
        // double MAXTIME;
        int discoveryAttemptsMax = default(3); // DISCOVERY_ATTEMPTS_MAX
        // int MTU;

        // 4. Dymo parameter group
        bool appendInformation = default(true); //APPEND_INFORMATION;
        int bufferSizePackets = default(-1); // BUFFER_SIZE_PACKETS
        int bufferSizeBytes @unit(B) = default(-1B); //  BUFFER_SIZE_BYTES
        // double CONTROL_TRAFFIC_LIMIT

        // Dymo extension parameters
        double maxJitter @unit(s) = default(10ms); // see IETF RFC5148 (Jitter Considerations in MANET)
        bool sendIntermediateRREP = default(true);
        int minHopLimit = default(5);
        int maxHopLimit = default(10);

    gates:
        input ipIn;
        output ipOut;
}

File: src/inet/routing/dymo/Dymo.ned