|
INET Framework for OMNeT++/OMNEST
|
This class 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. More...
#include <DYMO.h>
Public Member Functions | |
| DYMO () | |
| virtual | ~DYMO () |
Public Member Functions inherited from inet::ILifecycle | |
| virtual | ~ILifecycle () |
Public Member Functions inherited from inet::INetfilter::IHook | |
| virtual | ~IHook () |
Protected Member Functions | |
| virtual int | numInitStages () const override |
| void | initialize (int stage) override |
| void | handleMessage (cMessage *message) override |
Private Member Functions | |
| void | processSelfMessage (cMessage *message) |
| void | processMessage (cMessage *message) |
| void | startRouteDiscovery (const L3Address &target) |
| void | retryRouteDiscovery (const L3Address &target, int retryCount) |
| void | completeRouteDiscovery (const L3Address &target) |
| void | cancelRouteDiscovery (const L3Address &target) |
| bool | hasOngoingRouteDiscovery (const L3Address &target) |
| void | delayDatagram (INetworkDatagram *datagram) |
| void | reinjectDelayedDatagram (INetworkDatagram *datagram) |
| void | dropDelayedDatagram (INetworkDatagram *datagram) |
| void | eraseDelayedDatagrams (const L3Address &target) |
| bool | hasDelayedDatagrams (const L3Address &target) |
| void | cancelRREQTimer (const L3Address &target) |
| void | deleteRREQTimer (const L3Address &target) |
| void | eraseRREQTimer (const L3Address &target) |
| RREQWaitRREPTimer * | createRREQWaitRREPTimer (const L3Address &target, int retryCount) |
| void | scheduleRREQWaitRREPTimer (RREQWaitRREPTimer *message) |
| void | processRREQWaitRREPTimer (RREQWaitRREPTimer *message) |
| RREQBackoffTimer * | createRREQBackoffTimer (const L3Address &target, int retryCount) |
| void | scheduleRREQBackoffTimer (RREQBackoffTimer *message) |
| void | processRREQBackoffTimer (RREQBackoffTimer *message) |
| simtime_t | computeRREQBackoffTime (int retryCount) |
| RREQHolddownTimer * | createRREQHolddownTimer (const L3Address &target) |
| void | scheduleRREQHolddownTimer (RREQHolddownTimer *message) |
| void | processRREQHolddownTimer (RREQHolddownTimer *message) |
| void | sendUDPPacket (UDPPacket *packet, double delay) |
| void | processUDPPacket (UDPPacket *packet) |
| void | sendDYMOPacket (DYMOPacket *packet, const InterfaceEntry *interfaceEntry, const L3Address &nextHop, double delay) |
| void | processDYMOPacket (DYMOPacket *packet) |
| bool | permissibleRteMsg (RteMsg *rteMsg) |
| void | processRteMsg (RteMsg *rteMsg) |
| int | computeRteMsgBitLength (RteMsg *rteMsg) |
| RREQ * | createRREQ (const L3Address &target, int retryCount) |
| void | sendRREQ (RREQ *rreq) |
| void | processRREQ (RREQ *rreq) |
| int | computeRREQBitLength (RREQ *rreq) |
| RREP * | createRREP (RteMsg *rteMsg) |
| RREP * | createRREP (RteMsg *rteMsg, IRoute *route) |
| void | sendRREP (RREP *rrep) |
| void | sendRREP (RREP *rrep, IRoute *route) |
| void | processRREP (RREP *rrep) |
| int | computeRREPBitLength (RREP *rrep) |
| RERR * | createRERR (std::vector< L3Address > &addresses) |
| void | sendRERR (RERR *rerr) |
| void | sendRERRForUndeliverablePacket (const L3Address &destination) |
| void | sendRERRForBrokenLink (const InterfaceEntry *interfaceEntry, const L3Address &nextHop) |
| void | processRERR (RERR *rerr) |
| int | computeRERRBitLength (RERR *rerr) |
| IRoute * | createRoute (RteMsg *rteMsg, AddressBlock &addressBlock) |
| void | updateRoutes (RteMsg *rteMsg, AddressBlock &addressBlock) |
| void | updateRoute (RteMsg *rteMsg, AddressBlock &addressBlock, IRoute *route) |
| int | getLinkCost (const InterfaceEntry *interfaceEntry, DYMOMetricType metricType) |
| bool | isLoopFree (RteMsg *rteMsg, IRoute *route) |
| void | processExpungeTimer () |
| void | scheduleExpungeTimer () |
| void | expungeRoutes () |
| simtime_t | getNextExpungeTime () |
| DYMORouteState | getRouteState (DYMORouteData *routeData) |
| bool | isNodeUp () |
| void | configureInterfaces () |
| L3Address | getSelfAddress () |
| bool | isClientAddress (const L3Address &address) |
| void | addSelfNode (RteMsg *rteMsg) |
| void | addNode (RteMsg *rteMsg, AddressBlock &addressBlock) |
| void | incrementSequenceNumber () |
| Result | ensureRouteForDatagram (INetworkDatagram *datagram) |
| virtual Result | datagramPreRoutingHook (INetworkDatagram *datagram, const InterfaceEntry *inputInterfaceEntry, const InterfaceEntry *&outputInterfaceEntry, L3Address &nextHopAddress) override |
| This is the first hook called by the network protocol before it routes a datagram that was received from the lower layer. More... | |
| virtual Result | datagramForwardHook (INetworkDatagram *datagram, const InterfaceEntry *inputInterfaceEntry, const InterfaceEntry *&outputInterfaceEntry, L3Address &nextHopAddress) override |
| This is the second hook called by the network protocol before it sends a datagram to the lower layer. More... | |
| virtual Result | datagramPostRoutingHook (INetworkDatagram *datagram, const InterfaceEntry *inputInterfaceEntry, const InterfaceEntry *&outputInterfaceEntry, L3Address &nextHopAddress) override |
| This is the last hook called by the network protocol before it sends a datagram to the lower layer. More... | |
| virtual Result | datagramLocalInHook (INetworkDatagram *datagram, const InterfaceEntry *inputInterfaceEntry) override |
| This is the last hook called by the network protocol before it sends a datagram to the upper layer. More... | |
| virtual Result | datagramLocalOutHook (INetworkDatagram *datagram, const InterfaceEntry *&outputInterfaceEntry, L3Address &nextHopAddress) override |
| This is the first hook called by the network protocol before it routes a datagram that was received from the upper layer. More... | |
| virtual bool | handleOperationStage (LifecycleOperation *operation, int stage, IDoneCallback *doneCallback) override |
| Perform one stage of a lifecycle operation. More... | |
| virtual void | receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details) override |
Private Attributes | |
| const char * | clientAddresses |
| bool | useMulticastRREP |
| const char * | interfaces |
| double | activeInterval |
| double | maxIdleTime |
| double | maxSequenceNumberLifetime |
| double | routeRREQWaitTime |
| double | rreqHolddownTime |
| int | maxHopCount |
| int | discoveryAttemptsMax |
| bool | appendInformation |
| int | bufferSizePackets |
| int | bufferSizeBytes |
| simtime_t | maxJitter |
| bool | sendIntermediateRREP |
| int | minHopLimit |
| int | maxHopLimit |
| cModule * | host |
| NodeStatus * | nodeStatus |
| IL3AddressType * | addressType |
| IInterfaceTable * | interfaceTable |
| IRoutingTable * | routingTable |
| INetfilter * | networkProtocol |
| cMessage * | expungeTimer |
| DYMOSequenceNumber | sequenceNumber |
| std::map< L3Address, DYMOSequenceNumber > | targetAddressToSequenceNumber |
| std::map< L3Address, RREQTimer * > | targetAddressToRREQTimer |
| std::multimap< L3Address, INetworkDatagram * > | targetAddressToDelayedPackets |
| std::vector< std::pair< L3Address, int > > | clientAddressAndPrefixLengthPairs |
Additional Inherited Members | |
Public Types inherited from inet::INetfilter::IHook | |
| enum | Type { PREROUTING, LOCALIN, FORWARD, POSTROUTING, LOCALOUT } |
| enum | Result { ACCEPT, DROP, QUEUE, STOLEN } |
This class 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.
Optional features implemented:
| inet::dymo::DYMO::DYMO | ( | ) |
|
virtual |
|
private |
Referenced by addSelfNode().
|
private |
Referenced by processRREP(), and processRREQ().
|
private |
Referenced by handleOperationStage(), and processRREQWaitRREPTimer().
|
private |
Referenced by processRREP(), and processRREQWaitRREPTimer().
|
private |
Referenced by processRREP().
|
private |
Referenced by sendRERR().
|
private |
Referenced by sendRREP().
|
private |
Referenced by scheduleRREQBackoffTimer().
|
private |
Referenced by sendRREQ().
|
private |
Referenced by computeRREPBitLength(), and computeRREQBitLength().
|
private |
Referenced by handleOperationStage(), and initialize().
Referenced by processRERR(), sendRERRForBrokenLink(), and sendRERRForUndeliverablePacket().
|
private |
Referenced by updateRoutes().
Referenced by processRREQ().
Referenced by retryRouteDiscovery(), and startRouteDiscovery().
|
private |
Referenced by processRREQWaitRREPTimer().
|
private |
Referenced by processRREQWaitRREPTimer().
|
private |
Referenced by retryRouteDiscovery(), and startRouteDiscovery().
|
inlineoverrideprivatevirtual |
This is the second hook called by the network protocol before it sends a datagram to the lower layer.
This is done after the datagramPreRoutingHook or the datagramLocalInHook is called and the datagram is routed.
Implements inet::INetfilter::IHook.
|
inlineoverrideprivatevirtual |
This is the last hook called by the network protocol before it sends a datagram to the upper layer.
This is done after the datagramPreRoutingHook is called and the datagram is routed.
Implements inet::INetfilter::IHook.
|
inlineoverrideprivatevirtual |
This is the first hook called by the network protocol before it routes a datagram that was received from the upper layer.
The nextHopAddress is ignored when the outputInterfaceEntry is a nullptr. After this is done
Implements inet::INetfilter::IHook.
|
inlineoverrideprivatevirtual |
This is the last hook called by the network protocol before it sends a datagram to the lower layer.
Implements inet::INetfilter::IHook.
|
inlineoverrideprivatevirtual |
This is the first hook called by the network protocol before it routes a datagram that was received from the lower layer.
The nextHopAddress is ignored when the outputInterfaceEntry is nullptr.
Implements inet::INetfilter::IHook.
|
private |
Referenced by ensureRouteForDatagram().
|
private |
Referenced by processRREP().
|
private |
Referenced by cancelRouteDiscovery().
|
private |
|
private |
Referenced by cancelRouteDiscovery(), and completeRouteDiscovery().
|
private |
Referenced by processRREP(), processRREQHolddownTimer(), and processRREQWaitRREPTimer().
|
private |
Referenced by processExpungeTimer().
|
private |
|
private |
Referenced by scheduleExpungeTimer().
|
private |
Referenced by expungeRoutes(), and sendRERRForBrokenLink().
|
private |
Referenced by addSelfNode(), cancelRouteDiscovery(), completeRouteDiscovery(), createRREQ(), ensureRouteForDatagram(), eraseDelayedDatagrams(), initialize(), retryRouteDiscovery(), sendDYMOPacket(), startRouteDiscovery(), and updateRoutes().
|
overrideprotected |
|
overrideprivatevirtual |
Perform one stage of a lifecycle operation.
Processing may be done entirely within this method, or may be a longer process that involves nonzero simulation time or several events, and is triggered by this method call.
Return value: true = "done"; false = "not yet done, will invoke doneCallback when done"
Implements inet::ILifecycle.
|
private |
Referenced by processRREQHolddownTimer().
|
private |
Referenced by cancelRouteDiscovery(), completeRouteDiscovery(), ensureRouteForDatagram(), processRREP(), retryRouteDiscovery(), and startRouteDiscovery().
|
private |
Referenced by createRREP(), and createRREQ().
|
overrideprotected |
|
private |
Referenced by ensureRouteForDatagram(), processRREP(), and processRREQ().
Referenced by updateRoutes().
|
private |
Referenced by handleMessage(), and initialize().
|
inlineoverrideprotectedvirtual |
|
private |
Referenced by processRREP(), and processRREQ().
|
private |
Referenced by processUDPPacket().
|
private |
Referenced by processSelfMessage().
|
private |
Referenced by handleMessage().
|
private |
Referenced by processDYMOPacket().
|
private |
Referenced by processDYMOPacket().
|
private |
Referenced by processDYMOPacket().
|
private |
Referenced by processSelfMessage().
|
private |
Referenced by processSelfMessage().
|
private |
Referenced by processSelfMessage().
|
private |
Referenced by processRREP(), and processRREQ().
|
private |
Referenced by handleMessage().
|
private |
Referenced by processMessage().
|
overrideprivatevirtual |
|
private |
Referenced by completeRouteDiscovery().
|
private |
Referenced by processRREQBackoffTimer().
|
private |
Referenced by processExpungeTimer(), and updateRoute().
|
private |
Referenced by processRREQWaitRREPTimer().
|
private |
Referenced by processRREQWaitRREPTimer().
|
private |
Referenced by retryRouteDiscovery(), and startRouteDiscovery().
|
private |
Referenced by sendRERR(), sendRREP(), and sendRREQ().
|
private |
Referenced by processRERR(), sendRERRForBrokenLink(), and sendRERRForUndeliverablePacket().
|
private |
Referenced by receiveSignal().
|
private |
|
private |
Referenced by processRREP(), and processRREQ().
|
private |
Referenced by processRREQ(), retryRouteDiscovery(), and startRouteDiscovery().
|
private |
Referenced by sendDYMOPacket().
|
private |
Referenced by ensureRouteForDatagram(), and processRREQHolddownTimer().
|
private |
Referenced by createRoute(), and updateRoutes().
|
private |
Referenced by processRteMsg().
|
private |
Referenced by getRouteState(), and initialize().
|
private |
Referenced by addSelfNode(), configureInterfaces(), createRERR(), createRREQ(), initialize(), receiveSignal(), sendDYMOPacket(), sendRERR(), sendRREP(), and sendRREQ().
|
private |
Referenced by initialize(), processRREP(), and processRREQ().
|
private |
Referenced by initialize().
|
private |
Referenced by initialize().
|
private |
Referenced by initialize(), and isClientAddress().
|
private |
Referenced by initialize().
|
private |
Referenced by createRREQ(), initialize(), and processRREQWaitRREPTimer().
|
private |
Referenced by initialize(), processSelfMessage(), scheduleExpungeTimer(), and ~DYMO().
|
private |
Referenced by initialize().
|
private |
Referenced by configureInterfaces(), and initialize().
|
private |
Referenced by configureInterfaces(), initialize(), and updateRoute().
|
private |
Referenced by initialize(), and permissibleRteMsg().
|
private |
Referenced by createRERR(), createRREQ(), and initialize().
|
private |
Referenced by getRouteState(), and initialize().
|
private |
Referenced by initialize(), and sendRREQ().
|
private |
Referenced by expungeRoutes(), getNextExpungeTime(), and initialize().
|
private |
Referenced by createRREQ(), and initialize().
|
private |
Referenced by dropDelayedDatagram(), initialize(), and reinjectDelayedDatagram().
|
private |
Referenced by initialize(), and isNodeUp().
|
private |
Referenced by computeRREQBackoffTime(), initialize(), and scheduleRREQWaitRREPTimer().
|
private |
|
private |
Referenced by initialize(), and scheduleRREQHolddownTimer().
|
private |
Referenced by initialize().
|
private |
Referenced by addSelfNode(), createRREP(), createRREQ(), incrementSequenceNumber(), and updateRoute().
|
private |
|
private |
Referenced by createRERR(), createRREQ(), handleOperationStage(), and updateRoute().
|
private |
Referenced by initialize(), processRREP(), and processRREQ().