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... |
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:
3) Duplicate packet detection. We use special class DuplicatePacketDetection for this purpose.
Following optional protocol optimizations aren't implemented: