Classes | Enumerations

AODV
[Routing]

Collaboration diagram for AODV:

Classes

class  ns3::AodvHelper
 Helper class that adds AODV routing to nodes. More...
class  ns3::aodv::DuplicatePacketDetection
 Helper class used to remember already seen packets and detect duplicates. More...
class  ns3::aodv::IdCache
 Unique packets identification cache used for simple duplicate detection. More...
class  ns3::aodv::Neighbors
 maintain list of active neighbors More...
class  ns3::aodv::TypeHeader
 AODV types. More...
class  ns3::aodv::RreqHeader
 Route Request (RREQ) Message Format. More...
class  ns3::aodv::RrepHeader
 Route Reply (RREP) Message Format. More...
class  ns3::aodv::RrepAckHeader
 Route Reply Acknowledgment (RREP-ACK) Message Format. More...
class  ns3::aodv::RerrHeader
 Route Error (RERR) Message Format. More...
class  ns3::aodv::RoutingProtocol
 AODV routing protocol. More...
class  ns3::aodv::QueueEntry
 AODV Queue Entry. More...
class  ns3::aodv::RequestQueue
 AODV route request queue. More...
class  ns3::aodv::RoutingTableEntry
 Routing table entry. More...
class  ns3::aodv::RoutingTable
 The Routing table used by AODV protocol. More...

Enumerations

enum  ns3::aodv::RouteFlags { ns3::aodv::VALID = 0, ns3::aodv::INVALID = 1, ns3::aodv::IN_SEARCH = 2 }
 

Route record states.

More...

Detailed Description

This model implements the base specification of the Ad hoc on demand distance vector (AODV) protocol. Implementation is based on RFC3561.

Class aodv::RoutingProtocol implements all functionality of service packet exchange and inherits Ipv4RoutingProtocol. Base class defines two virtual functions for packet routing and forwarding. The first one, RouteOutput(), is used for locally originated packets, and the second one, RouteInput(), is used for forwarding and/or delivering received packets.

Protocol operation depends on the many adjustable parameters. Parameters for this functionality are attributes of aodv::RoutingProtocol. We support parameters, with their default values, from RFC and parameters that enable/disable protocol features, such as broadcasting HELLO messages, broadcasting data packets and so on.

AODV discovers routes on demand. Therefore, our AODV model buffer all packets, while a route request packet (RREQ) is disseminated. We implement a packet queue in aodv-rqueue.cc. Smart pointer to packet, Ipv4RoutingProtocol::ErrorCallback, Ipv4RoutingProtocol::UnicastForwardCallback and IP header are stored in this queue. The packet queue implements garbage collection of old packets and a queue size limit.

Routing table implementation support garbage collection of old entries and state machine, defined in standard. It implements as a STL map container. The key is a destination IP address.

Some moments of protocol operation aren't described in RFC. This moments generally concern cooperation of different OSI model layers. We use following heuristics:

1) This AODV implementation can detect the presence of unidirectional links and avoid them if necessary. If the node we received a RREQ for is a neighbor we are probably facing a unidirectional link... This heuristic is taken from AODV-UU implementation and can be disabled.

2) Protocol operation strongly depends on broken link detection mechanism. We implements two such heuristics. First, this implementation support HELLO messages. However HELLO messages are not a good way to do neighbor sensing in a wireless environment (at least not over 802.11). Therefore, you may experience bad performance when running over wireless. There are several reasons for this:

  1. HELLO messages are broadcasted. In 802.11, broadcasting is done at a lower bit rate than unicasting, thus HELLO messages travel further than data.
  2. HELLO messages are small, thus less prone to bit errors than data transmissions.
  3. Broadcast transmissions are not guaranteed to be bidirectional, unlike unicast transmissions. Second, we use layer 2 feedback when possible. Link considered to be broken, if frame transmission results in a transmission failure for all retries. This mechanism meant for active links and work much more faster, than first method. Layer 2 feedback implementation relies on TxErrHeader trace source, currently it is supported in AdhocWifiMac only.

3) Duplicate packet detection. We use special class DuplicatePacketDetection for this purpose.

Following optional protocol optimizations aren't implemented:


Enumeration Type Documentation

Route record states.

Enumerator:
VALID 

VALID.

INVALID 

INVALID.

IN_SEARCH 

IN_SEARCH.