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().