32 #define NS_LOG_APPEND_CONTEXT                                   \    33   if (GetObject<Node> ()) { std::clog << "[node " << GetObject<Node> ()->GetId () << "] "; }    40 #include "ns3/assert.h"    41 #include "ns3/fatal-error.h"    43 #include "ns3/uinteger.h"    44 #include "ns3/trace-source-accessor.h"    45 #include "ns3/udp-header.h"    46 #include "ns3/pointer.h"    47 #include "ns3/node-list.h"    48 #include "ns3/object-vector.h"    49 #include "ns3/ipv4-l3-protocol.h"    50 #include "ns3/ipv4-interface.h"    51 #include "ns3/ipv4-header.h"    52 #include "ns3/ipv4-address.h"    53 #include "ns3/ipv4-route.h"    54 #include "ns3/icmpv4-l4-protocol.h"    55 #include "ns3/ip-l4-protocol.h"    73     .AddAttribute (
"OptionNumber", 
"The Dsr option number.",
    76                    MakeUintegerChecker<uint8_t> ())
    77     .AddTraceSource (
"Drop",
    80                      "ns3::Packet::TracedCallback")
    81     .AddTraceSource (
"Rx",
    82                      "Receive DSR packet.",
    84                      "ns3::dsr::DsrOptionSRHeader::TracedCallback")
   114   std::vector<Ipv4Address>::iterator it = find (nodeList.begin (), nodeList.end (), destAddress);
   116   for (std::vector<Ipv4Address>::iterator i = it; i != nodeList.end (); ++i)
   118       if ((ipv4Address == (*i)) && ((*i) != nodeList.back ()))
   126 std::vector<Ipv4Address>
   130   std::vector<Ipv4Address>::iterator it = find (nodeList.begin (), nodeList.end (), ipv4Address);
   131   std::vector<Ipv4Address> cutRoute;
   132   for (std::vector<Ipv4Address>::iterator i = it; i != nodeList.end (); ++i)
   134       cutRoute.push_back (*i);
   152   std::vector<Ipv4Address> vec2 (vec);
   154   for (std::vector<Ipv4Address>::reverse_iterator ri = vec2.rbegin (); ri
   155        != vec2.rend (); ++ri)
   160   if ((vec.size () == vec2.size ()) && (vec.front () == vec2.back ()))
   172   if (vec.size () == 2)
   180       if (ipv4Address == vec.back ())
   182           NS_LOG_DEBUG (
"We have reached to the final destination " << ipv4Address << 
" " << vec.back ());
   185       for (std::vector<Ipv4Address>::const_iterator i = vec.begin (); i != vec.end (); ++i)
   187           if (ipv4Address == (*i))
   194   NS_LOG_DEBUG (
"next hop address not found, route corrupted");
   203   if (vec.size () == 2)
   211       for (std::vector<Ipv4Address>::reverse_iterator ri = vec.rbegin (); ri != vec.rend (); ++ri)
   213           if (ipv4Address == (*ri))
   220   NS_LOG_DEBUG (
"next hop address not found, route corrupted");
   231   for (std::vector<Ipv4Address>::reverse_iterator ri = vec.rbegin (); ri != vec.rend (); ++ri)
   233       if (ipv4Address == (*ri))
   235           nextTwoHop = *(ri + 2);
   257       for (std::vector<Ipv4Address>::const_iterator i = vec.begin (); i != vec.end (); ++i)
   267   for (std::vector<Ipv4Address>::const_iterator i = vec.begin (); i != vec.end (); ++i)
   269       for (std::vector<Ipv4Address>::const_iterator j = vec2.begin (); j != vec2.end (); ++j)
   287   for (std::vector<Ipv4Address>::const_iterator i = vec.begin (); i != vec.end (); ++i)
   289       if ((*i) == ipv4Address)
   305   std::vector<Ipv4Address> vec2 (vec); 
   308   for (std::vector<Ipv4Address>::const_iterator i = vec2.begin (); i != vec2.end (); ++i)
   317           for (std::vector<Ipv4Address>::iterator j = vec.begin (); j != vec.end (); ++j)
   321                   if ((j + 1) != vec.end ())
   323                       vec.erase (j + 1, vec.end ());   
   331               else if (j == (vec.end () - 1))
   350   for (int32_t i = 0; i < nNodes; ++i)
   354       if (ipv4->GetAddress (1, 0).GetLocal () == 
address)
   366   for (int32_t i = 0; i < nNodes; ++i)
   370       int32_t ifIndex = ipv4->GetInterfaceForAddress (ipv4Address);
   385     .SetGroupName (
"Dsr")
   410   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
   426     .SetGroupName (
"Dsr")
   450   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
   467     .SetGroupName (
"Dsr")
   497   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
   504   if (source == ipv4Address)
   506       NS_LOG_DEBUG (
"Discard the packet since it was originated from same source address");
   523   uint8_t numberAddress = (buf[1] - 6) / 4;
   524   NS_LOG_DEBUG (
"The number of Ip addresses " << (uint32_t)numberAddress);
   525   if (numberAddress >= 255)
   527       NS_LOG_DEBUG (
"Discard the packet, malformed header since two many ip addresses in route");
   541   p->RemoveHeader (rreq);
   551   uint16_t requestId = rreq.
GetId ();
   556   std::vector<Ipv4Address> nodeList (mainVector);
   574   uint8_t ttl = ipv4Header.
GetTtl ();
   575   bool dupRequest = 
false;  
   580       dupRequest = dsr->FindSourceEntry (sourceAddress, targetAddress, requestId);
   603       NS_LOG_DEBUG (
"Our node address is already seen in the route, drop the request");
   610       bool isRouteInCache = dsr->LookupRoute (targetAddress,
   614       std::vector<Ipv4Address> saveRoute (nodeList);
   629       NS_LOG_DEBUG (
"The target address over here " << targetAddress << 
" and the ip address " << ipv4Address << 
" and the source address " << mainVector[0]);
   630       if (targetAddress == ipv4Address)
   633           if (nodeList.size () == 1)
   640               nextHop = srcAddress;
   644               std::vector<Ipv4Address> changeRoute (nodeList);
   645               changeRoute.push_back (ipv4Address);    
   647               for (std::vector<Ipv4Address>::iterator i = changeRoute.begin (); i != changeRoute.end (); ++i)
   675           dsr->ScheduleInitialReply (newPacket, ipv4Address, nextHop, 
m_ipv4Route);
   684               bool addRoute = 
false;
   685               if (numberAddress > 0)
   689                   if (dsr->IsLinkCache ())
   691                       addRoute = dsr->AddRoute_Link (
m_finalRoute, ipv4Address);
   695                       addRoute = dsr->AddRoute (toSource);
   726                   if (nextHop == 
"0.0.0.0")
   728                       dsr->PacketNewRoute (dsrP, ipv4Address, dst, protocol);
   735                   dsr->SendPacketFromBuffer (sourceRoute, nextHop, protocol);
   737                   dsr->CancelRreqTimer (dst, 
true);
   761       else if (isRouteInCache && !areThereDuplicates)
   767           for (std::vector<Ipv4Address>::iterator i = saveRoute.begin (); i != saveRoute.end (); ++i)
   774           for (std::vector<Ipv4Address>::iterator j = ip.begin (); j != ip.end (); ++j)
   781           bool addRoute = 
false;
   786               saveRoute.push_back (ipv4Address);
   793               NS_ASSERT (saveRoute.front () == ipv4Address);
   795               if (dsr->IsLinkCache ())
   797                   addRoute = dsr->AddRoute_Link (saveRoute, ipv4Address);
   801                   addRoute = dsr->AddRoute (toSource);
   806                   NS_LOG_LOGIC (
"We have added the route and search send buffer for packet with destination " << dst);
   824                   if (nextHop == 
"0.0.0.0")
   826                       dsr->PacketNewRoute (dsrP, ipv4Address, dst, protocol);
   833                   dsr->SendPacketFromBuffer (sourceRoute, nextHop, protocol);
   835                   dsr->CancelRreqTimer (dst, 
true);
   872           dsrRoutingHeader.SetMessageType (1);
   873           dsrRoutingHeader.SetSourceId (
GetIDfromIP (realSource));
   874           dsrRoutingHeader.SetDestId (255);
   877           dsrRoutingHeader.SetPayloadLength (length + 2);
   878           dsrRoutingHeader.AddDsrOption (rrep);
   881           dsr->ScheduleCachedReply (newPacket, ipv4Address, nextHop, 
m_ipv4Route, hops);
   890           mainVector.push_back (ipv4Address);
   891           NS_ASSERT (mainVector.front () == source);
   901               p->RemoveHeader (rerr);
   906               if ((errorSrc == srcAddress) && (unreachNode == ipv4Address))
   916                   dsr->DeleteAllRoutesIncludeLink (errorSrc, unreachNode, ipv4Address);
   925                   NS_LOG_DEBUG (
"The RREQ and newUnreach header length " <<  length);
   939           uint8_t ttl = ipv4Header.
GetTtl ();
   952               dsr->ScheduleInterRequest (interP);
   967     .SetGroupName (
"Dsr")
   997   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
  1004   uint8_t numberAddress = (buf[1] - 2) / 4;
  1013   NS_LOG_DEBUG (
"The next header value " << (uint32_t)protocol);
  1021   if (targetAddress == ipv4Address)
  1025       if (nodeList.size () == 0)
  1040       NS_ASSERT (nodeList.front () == ipv4Address);
  1041       bool addRoute = 
false;
  1042       if (dsr->IsLinkCache ())
  1044           addRoute = dsr->AddRoute_Link (nodeList, ipv4Address);
  1048           addRoute = dsr->AddRoute (toDestination);
  1053           NS_LOG_DEBUG (
"We have added the route and search send buffer for packet with destination " << dst);
  1058           NS_LOG_DEBUG (
"The route length " << nodeList.size ());
  1064           if (nextHop == 
"0.0.0.0")
  1066               dsr->PacketNewRoute (dsrP, ipv4Address, dst, protocol);
  1072           dsr->CancelRreqTimer (dst, 
true);
  1076           dsr->SendPacketFromBuffer (sourceRoute, nextHop, protocol);
  1087       NS_LOG_DEBUG (
"The length of rrep option " << (uint32_t)length);
  1089       if (length % 2 != 0)
  1099       std::vector<Ipv4Address> routeCopy = nodeList;
  1100       std::vector<Ipv4Address> cutRoute = 
CutRoute (ipv4Address, nodeList);
  1102       if (cutRoute.size () >= 2)
  1105           NS_LOG_DEBUG (
"The route destination after cut " << dst);
  1107           NS_ASSERT (cutRoute.front () == ipv4Address);
  1108           bool addRoute = 
false;
  1109           if (dsr->IsLinkCache ())
  1111               addRoute = dsr->AddRoute_Link (nodeList, ipv4Address);
  1115               addRoute = dsr->AddRoute (toDestination);
  1119               dsr->CancelRreqTimer (dst, 
true);
  1134       NS_ASSERT (routeCopy.back () == source);
  1136       NS_LOG_DEBUG (
"The nextHop address " << nextHop << 
" and the source in the route reply " << source);
  1148       NS_LOG_DEBUG (
"The reply header length " << (uint32_t)length);
  1155       newPacket->
AddHeader (dsrRoutingHeader);
  1156       dsr->SendReply (newPacket, ipv4Address, nextHop, 
m_ipv4Route);
  1168     .SetGroupName (
"Dsr")
  1197   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Address << ipv4Header << (uint32_t)protocol << isPromisc);
  1202   uint8_t numberAddress = (buf[1] - 2) / 4;
  1231       NS_LOG_LOGIC (
"We process promiscuous receipt data packet");
  1235           dsr->SendGratuitousReply (source, srcAddress, nodeList, protocol);
  1241       if (destAddress != destination)
  1243           NS_LOG_DEBUG (
"Process the promiscuously received packet");
  1244           bool findPassive = 
false;
  1246           for (int32_t i = 0; i < nNodes; ++i)
  1253               findPassive = dsrNode->PassiveEntryCheck (packet, source, destination, segsLeft, fragmentOffset, identification, 
false);
  1262               NS_LOG_DEBUG (
"We find one previously received passive entry");
  1272               dsrSrc->CancelPassiveTimer (packet, source, destination, segsLeft);
  1277               dsr->PassiveEntryCheck (packet, source, destination, segsLeft, fragmentOffset, identification, 
true);
  1288       uint8_t length = sourceRoute.
GetLength ();
  1289       uint8_t nextAddressIndex;
  1293       uint32_t size = p->
GetSize ();
  1294       uint8_t *
data = 
new uint8_t[size];
  1296       uint8_t optionType = 0;
  1297       optionType = *(
data);
  1300       if (optionType == 160)
  1302           NS_LOG_LOGIC (
"Remove the ack request header and add ack header to the packet");
  1306           uint16_t ackId = ackReq.
GetAckId ();
  1313           if (!nodeList.empty ())
  1315               if (segsLeft > numberAddress)   
  1322               if (numberAddress - segsLeft < 2)   
  1328               ackAddress = nodeList[numberAddress - segsLeft - 2];
  1331           NS_LOG_DEBUG (
"Send back ACK to the earlier hop " << ackAddress << 
" from us " << ipv4Address);
  1332           dsr->SendAck (ackId, ackAddress, source, destination, protocol, 
m_ipv4Route);
  1345       if (length % 2 != 0)
  1352       if (segsLeft > numberAddress) 
  1363       nextAddressIndex = numberAddress - segsLeft;
  1365       NS_LOG_DEBUG (
"The next address of source route option " << nextAddress << 
" and the nextAddressIndex: " << (uint32_t)nextAddressIndex << 
" and the segments left : " << (uint32_t)segsLeft);
  1377       if (nextHop == 
"0.0.0.0")
  1380           dsr->PacketNewRoute (dsrP, realSource, targetAddress, protocol);
  1384       if (ipv4Address == nextHop)
  1397       SetRoute (nextAddress, ipv4Address);
  1399       dsr->ForwardPacket (dsrP, newSourceRoute, ipv4Header, realSource, nextAddress, targetAddress, protocol, 
m_ipv4Route);
  1410     .SetGroupName (
"Dsr")
  1439   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
  1441   uint32_t size = p->
GetSize ();
  1442   uint8_t *
data = 
new uint8_t[size];
  1444   uint8_t errorType = *(
data + 2);
  1454   NS_LOG_DEBUG (
"The error type value here " << (uint32_t)errorType);
  1468       NS_LOG_DEBUG (
"The error source is " <<  rerrUnreach.
GetErrorDst () << 
"and the unreachable node is " << unreachAddress);
  1477       dsr->DeleteAllRoutesIncludeLink (errorSource, unreachAddress, ipv4Address);
  1480       uint32_t serialized = 
DoSendError (newP, rerrUnreach, rerrSize, ipv4Address, protocol);
  1500       uint32_t serialized = 0;
  1510   uint8_t numberAddress = (buf[1] - 2) / 4;
  1513   NS_LOG_DEBUG (
"The number of addresses " << (uint32_t)numberAddress);
  1527   uint8_t length = sourceRoute.
GetLength ();
  1528   uint8_t nextAddressIndex;
  1540   if (length % 2 != 0)
  1547   if (segmentsLeft > numberAddress)
  1556   if (segmentsLeft == 0 && targetAddress == ipv4Address)
  1558       NS_LOG_INFO (
"This is the destination of the error, send error request");
  1559       dsr->SendErrorRequest (rerr, protocol);
  1560       return serializedSize;
  1566   nextAddressIndex = numberAddress - segmentsLeft;
  1576       return serializedSize;
  1580   SetRoute (nextAddress, ipv4Address);
  1581   dsr->ForwardErrPacket (rerr, newSourceRoute, nextAddress, protocol, 
m_ipv4Route);
  1582   return serializedSize;
  1589   static TypeId tid = 
TypeId (
"ns3::dsr::DsrOptionAckReq")
  1591     .SetGroupName (
"Dsr")
  1620   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
  1636   NS_LOG_DEBUG (
"The next header value " << (uint32_t)protocol);
  1647     .SetGroupName (
"Dsr")
  1676   NS_LOG_FUNCTION (
this << packet << dsrP << ipv4Address << source << ipv4Header << (uint32_t)protocol << isPromisc);
  1694   dsr->UpdateRouteEntry (realDst);
  1698   dsr->CallCancelPacketTimer (ackId, ipv4Header, realSrc, realDst);
 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
static const uint8_t OPT_NUMBER
Dsr Route Error option number. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
static const uint8_t OPT_NUMBER
Rreq option number. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
DsrRouteCacheEntry class for entries in the route cache. 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
static uint32_t GetNNodes(void)
static const uint8_t OPT_NUMBER
Dsr ack request option number. 
static TypeId GetTypeId()
Get the type ID. 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
static Ptr< Node > GetNode(uint32_t n)
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
  Introspection did not find any typical Config paths. 
static TypeId GetTypeId()
Get the type ID. 
virtual uint8_t GetOptionNumber() const =0
Get the option number. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
#define NS_UNUSED(x)
Mark a local variable as unused. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
  Introspection did not find any typical Config paths. 
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
void SetNode(Ptr< Node > node)
Set the node. 
static const uint8_t OPT_NUMBER
Pad1 option number. 
uint8_t DoSendError(Ptr< Packet > p, DsrOptionRerrUnreachHeader &rerr, uint32_t rerrSize, Ipv4Address ipv4Address, uint8_t protocol)
Do Send error message. 
uint32_t GetIDfromIP(Ipv4Address address)
Get the node id with Ipv4Address. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source. 
void SetSource(Ipv4Address src)
bool IsMulticast(void) const
IP_VECTOR GetVector() const
Get the IP vector. 
void SetTtl(uint8_t ttl)
Set the tag's TTL. 
  Introspection did not find any typical Config paths. 
static TypeId GetTypeId()
Get the type ID. 
void SetGateway(Ipv4Address gw)
Hold an unsigned integer type. 
DsrOptionRreq()
Constructor. 
Ipv4Address ReverseSearchNextTwoHop(Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec)
Reverse search for the next two hop in the route. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
TracedCallback< Ptr< const Packet > > m_dropTrace
Drop trace callback. 
static const uint8_t OPT_NUMBER
Router alert option number. 
static TypeId GetTypeId()
Get the type ID. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
std::vector< Ipv4Address > IP_VECTOR
Define the vector to hold Ip address. 
static const uint8_t OPT_NUMBER
PadN option number. 
virtual ~DsrOptionRreq()
Destructor. 
std::vector< Ipv4Address > m_finalRoute
The vector of final Ipv4 address. 
Access to the IPv4 forwarding table, interfaces, and configuration. 
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object. 
void RemoveDuplicates(std::vector< Ipv4Address > &vec)
Remove the duplicates from the route. 
Time ActiveRouteTimeout
The active route timeout value. 
void PrintVector(std::vector< Ipv4Address > &vec)
Print out the elements in the route vector. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
Ptr< Packet > Copy(void) const
performs a COW copy of the packet. 
static const uint8_t OPT_NUMBER
The Dsr Ack option number. 
Ipv4Address SearchNextHop(Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec)
Search for the next hop in the route. 
  Introspection did not find any typical Config paths. 
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
Ptr< Node > GetNode() const
Get the node. 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
virtual uint8_t GetOptionNumber() const
Get the option number. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
TracedCallback< const DsrOptionSRHeader & > m_rxPacketTrace
The receive trace back, only triggered when final destination receive data packet. 
static TypeId GetTypeId()
Get the type ID. 
virtual ~DsrOptions()
Destructor. 
Ipv4 addresses are stored in host order in this class. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
Ptr< Node > m_node
the node 
static TypeId GetTypeId()
Get the type ID. 
  Introspection did not find any typical Config paths. 
  Introspection did not find any typical Config paths. 
void AddPacketTag(const Tag &tag) const
Add a packet tag. 
void AddDsrOption(DsrOptionHeader const &option)
Serialize the option, prepending pad1 or padn option as necessary. 
bool CheckDuplicates(Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec)
Check if the route already contains the node ip address. 
virtual uint8_t GetOptionNumber() const
Get the option number. 
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer. 
bool ReverseRoutes(std::vector< Ipv4Address > &vec)
Reverse the routes. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
Ptr< Ipv4Route > m_ipv4Route
The ipv4 route. 
Ipv4Address ReverseSearchNextHop(Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec)
Reverse search for the next hop in the route. 
virtual ~DsrOptionAckReq()
static TypeId GetTypeId(void)
Get the type identificator. 
bool ContainAddressAfter(Ipv4Address ipv4Address, Ipv4Address destAddress, std::vector< Ipv4Address > &nodeList)
Search for the ipv4 address in the node list. 
  Introspection did not find any typical Config paths. 
static const uint8_t OPT_NUMBER
Source Route option number. 
  Introspection did not find any typical Config paths. 
A base class which provides memory management and object aggregation. 
  Introspection did not find any typical Config paths. 
virtual Ptr< Ipv4Route > SetRoute(Ipv4Address nextHop, Ipv4Address srcAddress)
Set the route to use for data packets, used by the option headers when sending data/control packets...
virtual TypeId GetInstanceTypeId() const
Get the instance type ID. 
bool IfDuplicates(std::vector< Ipv4Address > &vec, std::vector< Ipv4Address > &vec2)
Check if the two vectors contain duplicate or not. 
Ptr< Node > GetNodeWithAddress(Ipv4Address ipv4Address)
Get the node object with Ipv4Address. 
static TypeId GetTypeId()
Get the type ID. 
virtual uint8_t Process(Ptr< Packet > packet, Ptr< Packet > dsrP, Ipv4Address ipv4Address, Ipv4Address source, Ipv4Header const &ipv4Header, uint8_t protocol, bool &isPromisc, Ipv4Address promiscSource)
Process method. 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface. 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
void AddHeader(const Header &header)
Add header to this packet. 
void SetDestination(Ipv4Address dest)
std::vector< Ipv4Address > CutRoute(Ipv4Address ipv4Address, std::vector< Ipv4Address > &nodeList)
Cut the route from ipv4Address to the end of the route vector. 
static TypeId GetTypeId()
Get the type ID.