26 #include "ns3/simulator.h" 
   27 #include "ns3/packet.h" 
   28 #include "ns3/mesh-point-device.h" 
   29 #include "ns3/wifi-net-device.h" 
   30 #include "ns3/mesh-wifi-interface-mac.h" 
   31 #include "ns3/random-variable-stream.h" 
   35 #include "ns3/trace-source-accessor.h" 
   51     .SetGroupName (
"Mesh")
 
   53     .AddAttribute ( 
"RandomStart",
 
   54                     "Random delay at first proactive PREQ",
 
   60     .AddAttribute ( 
"MaxQueueSize",
 
   61                     "Maximum number of packets we can store when resolving route",
 
   65                     MakeUintegerChecker<uint16_t> (1)
 
   67     .AddAttribute ( 
"Dot11MeshHWMPmaxPREQretries",
 
   68                     "Maximum number of retries before we suppose the destination to be unreachable",
 
   72                     MakeUintegerChecker<uint8_t> (1)
 
   74     .AddAttribute ( 
"Dot11MeshHWMPnetDiameterTraversalTime",
 
   75                     "Time we suppose the packet to go from one edge of the network to another",
 
   81     .AddAttribute ( 
"Dot11MeshHWMPpreqMinInterval",
 
   82                     "Minimal interval between to successive PREQs",
 
   88     .AddAttribute ( 
"Dot11MeshHWMPperrMinInterval",
 
   89                     "Minimal interval between to successive PREQs",
 
   94     .AddAttribute ( 
"Dot11MeshHWMPactiveRootTimeout",
 
   95                     "Lifetime of poractive routing information",
 
  101     .AddAttribute ( 
"Dot11MeshHWMPactivePathTimeout",
 
  102                     "Lifetime of reactive routing information",
 
  108     .AddAttribute ( 
"Dot11MeshHWMPpathToRootInterval",
 
  109                     "Interval between two successive proactive PREQs",
 
  115     .AddAttribute ( 
"Dot11MeshHWMPrannInterval",
 
  116                     "Lifetime of poractive routing information",
 
  122     .AddAttribute ( 
"MaxTtl",
 
  123                     "Initial value of Time To Live field",
 
  127                     MakeUintegerChecker<uint8_t> (2)
 
  129     .AddAttribute ( 
"UnicastPerrThreshold",
 
  130                     "Maximum number of PERR receivers, when we send a PERR as a chain of unicasts",
 
  134                     MakeUintegerChecker<uint8_t> (1)
 
  136     .AddAttribute ( 
"UnicastPreqThreshold",
 
  137                     "Maximum number of PREQ receivers, when we send a PREQ as a chain of unicasts",
 
  141                     MakeUintegerChecker<uint8_t> (1)
 
  143     .AddAttribute ( 
"UnicastDataThreshold",
 
  144                     "Maximum number ofbroadcast receivers, when we send a broadcast as a chain of unicasts",
 
  148                     MakeUintegerChecker<uint8_t> (1)
 
  150     .AddAttribute ( 
"DoFlag",
 
  151                     "Destination only HWMP flag",
 
  157     .AddAttribute ( 
"RfFlag",
 
  158                     "Reply and forward flag",
 
  164     .AddTraceSource ( 
"RouteDiscoveryTime",
 
  165                       "The time of route discovery procedure",
 
  168                       "ns3::Time::TracedCallback" 
  170     .AddTraceSource (
"RouteChange",
 
  171                      "Routing table changed",
 
  173                      "ns3::HwmpProtocol::RouteChangeTracedCallback" 
  185   m_maxQueueSize (255),
 
  186   m_dot11MeshHWMPmaxPREQretries (3),
 
  187   m_dot11MeshHWMPnetDiameterTraversalTime (
MicroSeconds (1024*100)),
 
  188   m_dot11MeshHWMPpreqMinInterval (
MicroSeconds (1024*100)),
 
  189   m_dot11MeshHWMPperrMinInterval (
MicroSeconds (1024*100)),
 
  190   m_dot11MeshHWMPactiveRootTimeout (
MicroSeconds (1024*5000)),
 
  191   m_dot11MeshHWMPactivePathTimeout (
MicroSeconds (1024*5000)),
 
  192   m_dot11MeshHWMPpathToRootInterval (
MicroSeconds (1024*2000)),
 
  196   m_unicastPerrThreshold (32),
 
  197   m_unicastPreqThreshold (1),
 
  198   m_unicastDataThreshold (1),
 
  229       i->second.preqTimeout.Cancel ();
 
  243   uint32_t sourceIface,
 
  247   uint16_t protocolType, 
 
  251   NS_LOG_FUNCTION (
this << sourceIface << source << destination << constPacket << protocolType);
 
  259           NS_FATAL_ERROR (
"HWMP tag has come with a packet from upper layer. This must not occur...");
 
  272           NS_FATAL_ERROR (
"HWMP tag is supposed to be here at this point.");
 
  286       std::vector<uint16_t> channels;
 
  289           bool shouldSend = 
true;
 
  290           for (std::vector<uint16_t>::const_iterator chan = channels.begin (); chan != channels.end (); chan++)
 
  292               if ((*chan) == plugin->second->GetChannelId ())
 
  301           channels.push_back (plugin->second->GetChannelId ());
 
  303           for (std::vector<Mac48Address>::const_iterator i = receivers.begin (); i != receivers.end (); i++)
 
  313               routeReply (
true, packetCopy, source, destination, protocolType, plugin->first);
 
  319       return ForwardUnicast (sourceIface, source, destination, packet, protocolType, routeReply, tag.
GetTtl ());
 
  330       NS_FATAL_ERROR (
"HWMP tag must exist when packet received from the network");
 
  338   NS_LOG_FUNCTION (
this << sourceIface << source << destination << packet << protocolType << ttl);
 
  354       routeReply (
true, packet, source, destination, protocolType, result.
ifIndex);
 
  372           NS_LOG_DEBUG (
"Path error, lookup expired proactive path");
 
  377           NS_LOG_DEBUG (
"Path error, initiate reactive path error");
 
  389       uint32_t dst_seqno = 0;
 
  392           dst_seqno = result.
seqnum;
 
  397           i->second->RequestDestination (destination, originator_seqno, dst_seqno);
 
  402   pkt.
dst = destination;
 
  405   pkt.
reply = routeReply;
 
  415       NS_LOG_DEBUG (
"Dropping packet from " << source << 
" to " << destination << 
" due to queue overflow");
 
  427   bool freshInfo (
true);
 
  437           if (i->second.second <= preq.
GetMetric ())
 
  466       rChange.
type = 
"Add Reactive";
 
  491       rChange.
type = 
"Add Reactive";
 
  510           NS_ASSERT (((*i)->IsDo ()) && ((*i)->IsRf ()));
 
  528               rChange.
type = 
"Add Proactive";
 
  553       if ((*i)->GetDestinationAddress () == 
GetAddress ())
 
  575           if ((lifetime > 0) && ((int32_t)(result.
seqnum - (*i)->GetDestSeqNumber ()) >= 0))
 
  578                 (*i)->GetDestinationAddress (),
 
  591                   (*i)->SetFlags (
true, 
false, (*i)->IsUsn ()); 
 
  610       i->second->SendPreq (preq);
 
  621   bool freshInfo (
true);
 
  625       if ((int32_t)(i->second.first - sequence) > 0)
 
  629       if (i->second.first == sequence)
 
  658       rChange.
type = 
"Add Reactive";
 
  664       rChange.
seqnum = sequence;
 
  689       rChange.
type = 
"Add Reactive";
 
  695       rChange.
seqnum = sequence;
 
  709   HwmpProtocolMacMap::const_iterator prep_sender = 
m_interfaces.find (result.ifIndex);
 
  711   prep_sender->second->SendPrep (prep, result.retransmitter);
 
  719   std::vector<FailedDestination> retval;
 
  721   for (
unsigned int i = 0; i < destinations.size (); i++)
 
  726             (result.
ifIndex != interface) ||
 
  727             ((int32_t)(result.
seqnum - destinations[i].seqnum) > 0)
 
  730           retval.push_back (destinations[i]);
 
  733   if (retval.size () == 0)
 
  745   uint32_t originatorDsn,
 
  746   uint32_t destinationSN,
 
  759   HwmpProtocolMacMap::const_iterator prep_sender = 
m_interfaces.find (interface);
 
  761   prep_sender->second->SendPrep (prep, retransmitter);
 
  769   std::vector<Ptr<NetDevice> > 
interfaces = mp->GetInterfaces ();
 
  770   for (std::vector<
Ptr<NetDevice> >::const_iterator i = interfaces.begin (); i != interfaces.end (); i++)
 
  786       mac->InstallPlugin (hwmpMac);
 
  791   mp->SetRoutingProtocol (
this);
 
  793   mp->AggregateObject (
this);
 
  800   NS_LOG_FUNCTION (
this << meshPointAddress << peerAddress << interface << status);
 
  806   NS_LOG_DEBUG (destinations.size () << 
" failed destinations for peer address " << peerAddress);
 
  822   std::map<Mac48Address, uint32_t,std::less<Mac48Address> >::const_iterator i = 
m_lastDataSeqno.find (source);
 
  829       if ((int32_t)(i->second - seqno)  >= 0)
 
  849   for (
unsigned int i = 0; i < destinations.size (); i++)
 
  855       rChange.
type = 
"Delete Reactive";
 
  857       rChange.
seqnum = destinations[i].seqnum;
 
  868       std::vector<Mac48Address> receivers_for_interface;
 
  869       for (
unsigned int j = 0; j < perr.
receivers.size (); j++)
 
  873               receivers_for_interface.push_back (perr.
receivers[j].second);
 
  876       i->second->InitiatePerr (perr.
destinations, receivers_for_interface);
 
  885       std::vector<Mac48Address> receivers_for_interface;
 
  886       for (
unsigned int j = 0; j < perr.
receivers.size (); j++)
 
  890               receivers_for_interface.push_back (perr.
receivers[j].second);
 
  893       i->second->ForwardPerr (perr.
destinations, receivers_for_interface);
 
  897 std::vector<std::pair<uint32_t, Mac48Address> >
 
  902   for (
unsigned int i = 0; i < failedDest.size (); i++)
 
  908       rChange.
type = 
"Delete Reactive";
 
  910       rChange.
seqnum = failedDest[i].seqnum;
 
  915       rChangePro.
type = 
"Delete Proactive";
 
  916       rChangePro.
destination = failedDest[i].destination;
 
  917       rChangePro.
seqnum = failedDest[i].seqnum;
 
  919       for (
unsigned int j = 0; j < precursors.size (); j++)
 
  921           retval.push_back (precursors[j]);
 
  925   for (
unsigned int i = 0; i < retval.size (); i++)
 
  927       for (
unsigned int j = i+1; j < retval.size (); j++)
 
  931               retval.erase (retval.begin () + j);
 
  937 std::vector<Mac48Address>
 
  941   std::vector<Mac48Address> retval;
 
  953 std::vector<Mac48Address>
 
  957   std::vector<Mac48Address> retval;
 
  988   for (std::vector<QueuedPacket>::iterator i = 
m_rqueue.begin (); i != 
m_rqueue.end (); i++)
 
 1018   std::map<Mac48Address, PreqEvent>::iterator i = 
m_preqTimeouts.find (dst);
 
 1028   while (packet.
pkt != 0)
 
 1050   while (packet.
pkt != 0)
 
 1072   std::map<Mac48Address, PreqEvent>::const_iterator i = 
m_preqTimeouts.find (dst);
 
 1094       std::map<Mac48Address, PreqEvent>::iterator i = 
m_preqTimeouts.find (dst);
 
 1103       while (packet.
pkt != 0)
 
 1109       std::map<Mac48Address, PreqEvent>::iterator i = 
m_preqTimeouts.find (dst);
 
 1120       i->second->RequestDestination (dst, originator_seqno, dst_seqno);
 
 1157       i->second->SendPreq (preq);
 
 1228   os << 
"<Statistics " 
 1229   "txUnicast=\"" << txUnicast << 
"\" " 
 1230   "txBroadcast=\"" << txBroadcast << 
"\" " 
 1231   "txBytes=\"" << txBytes << 
"\" " 
 1232   "droppedTtl=\"" << droppedTtl << 
"\" " 
 1233   "totalQueued=\"" << totalQueued << 
"\" " 
 1234   "totalDropped=\"" << totalDropped << 
"\" " 
 1235   "initiatedPreq=\"" << initiatedPreq << 
"\" " 
 1236   "initiatedPrep=\"" << initiatedPrep << 
"\" " 
 1237   "initiatedPerr=\"" << initiatedPerr << 
"\"/>" << std::endl;
 
 1243   "address=\"" << 
m_address << 
"\"" << std::endl <<
 
 1253   "isRoot=\"" << 
m_isRoot << 
"\"" << std::endl <<
 
 1254   "maxTtl=\"" << (uint16_t)
m_maxTtl << 
"\"" << std::endl <<
 
 1258   "doFlag=\"" << 
m_doFlag << 
"\"" << std::endl <<
 
 1259   "rfFlag=\"" << 
m_rfFlag << 
"\">" << std::endl;
 
 1263       plugin->second->Report (os);
 
 1265   os << 
"</Hwmp>" << std::endl;
 
 1274       plugin->second->ResetStats ();
 
Time m_dot11MeshHWMPrannInterval
 
Structure of path error: IePerr and list of receivers: interfaces and MAC address. 
 
void SetDestinationAddress(Mac48Address dest_address)
Set destination address function. 
 
void SetPreqID(uint32_t id)
Set path discovery id field. 
 
uint16_t txBroadcast
transmit broadcast 
 
bool RequestRoute(uint32_t sourceIface, const Mac48Address source, const Mac48Address destination, Ptr< const Packet > packet, uint16_t protocolType, RouteReplyCallback routeReply)
Route request, inherited from MeshL2RoutingProtocol. 
 
Simulation virtual time values and global simulation resolution. 
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
void SetStream(int64_t stream)
Specifies the stream number for the RngStream. 
 
Mac48Address retransmitter
route source 
 
std::string type
type of change 
 
AttributeValue implementation for Boolean. 
 
uint32_t GetDestinationSeqNumber() const 
Get destination sequence number function. 
 
Hwmp tag implements interaction between HWMP protocol and MeshWifiMac. 
 
void SetTTL(uint8_t ttl)
Set remaining number of hops allowed for this element. 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
void IncrementMetric(uint32_t metric)
Increment metric function. 
 
static const uint32_t MAX_METRIC
Maximum (the best?) path metric. 
 
void SetOriginatorSeqNumber(uint32_t originator_seq_number)
Set originator sequence number function. 
 
Route lookup result, return type of LookupXXX methods. 
 
Time m_dot11MeshHWMPpreqMinInterval
 
uint16_t initiatedPreq
initiated PREQ 
 
Time m_dot11MeshHWMPperrMinInterval
 
void SendPrep(Mac48Address src, Mac48Address dst, Mac48Address retransmitter, uint32_t initMetric, uint32_t originatorDsn, uint32_t destinationSN, uint32_t lifetime, uint32_t interface)
Send Path Reply. 
 
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
uint16_t droppedTtl
dropped TTL 
 
void AddPacketTag(const Tag &tag) const 
Add a packet tag. 
 
Time m_dot11MeshHWMPactiveRootTimeout
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
void ForwardPathError(PathError perr)
Forwards a received path error. 
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
See 7.3.2.97 of 802.11s draft 2.07. 
 
uint32_t GetSize(void) const 
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
 
uint32_t ifIndex
IF index. 
 
LookupResult LookupReactiveExpired(Mac48Address destination)
Return all reactive paths, including expired. 
 
bool GetRfFlag()
Get rf flag function. 
 
Mac48Address GetDestinationAddress() const 
Get destination address function. 
 
Mac48Address src
src address 
 
bool Install(Ptr< MeshPointDevice >)
Install HWMP on given mesh point. 
 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
 
void InitiatePathError(PathError perr)
Passes a self-generated PERR to interface-plugin. 
 
uint32_t CalculateMetric(Mac48Address peerAddress, Ptr< MeshWifiInterfaceMac > mac)
Airtime link metric is defined in Section 13.9 of IEEE 802.11-2012 as: 
 
void SetTtl(uint8_t ttl)
Set TTL function. 
 
Time lifetime
lifetime of route 
 
Statistics m_stats
statistics 
 
uint8_t GetMaxTtl()
Get maximum TTL function. 
 
uint32_t GetLifetime() const 
Get lifetime value. 
 
void SetTtl(uint8_t ttl)
Set the TTL value. 
 
void ReactivePathResolved(Mac48Address dst)
 
void SetOriginatorAddress(Mac48Address originator_address)
Set originator address function. 
 
std::map< Mac48Address, std::pair< uint32_t, uint32_t > > m_hwmpSeqnoMetricDatabase
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address ...
 
void SetAddress(Mac48Address retransmitter)
Set address. 
 
uint8_t m_unicastDataThreshold
 
LookupResult LookupReactive(Mac48Address destination)
Lookup path to destination. 
 
TracedCallback< Time > m_routeDiscoveryTimeCallback
Route discovery time: 
 
void SetLifetime(uint32_t lifetime)
Set lifetime in TUs for the forwarding information to be considered valid. 
 
void ReceivePrep(IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric)
Handler for receiving Path Reply. 
 
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source. 
 
void SendProactivePreq()
Proactive Preq routines: 
 
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. 
 
bool DropDataFrame(uint32_t seqno, Mac48Address source)
MAC-plugin asks whether the frame can be dropped. 
 
QueuedPacket DequeueFirstPacket()
 
std::vector< std::pair< uint32_t, Mac48Address > > PrecursorList
Path precursor = {MAC, interface ID}. 
 
Mac48Address GetOriginatorAddress() const 
Get originator address function. 
 
uint32_t seqnum
sequence number 
 
Ptr< Packet > pkt
the packet 
 
Routing table for HWMP – 802.11s routing protocol. 
 
void Print(std::ostream &os) const 
Print function. 
 
std::vector< Mac48Address > GetPreqReceivers(uint32_t interface)
Get PREQ receivers. 
 
double GetSeconds(void) const 
Get an approximation of the time stored in this instance in the indicated unit. 
 
bool RemoveRoutingStuff(uint32_t fromIface, const Mac48Address source, const Mac48Address destination, Ptr< Packet > packet, uint16_t &protocolType)
Clean HWMP packet tag from packet; only the packet parameter is used. 
 
uint16_t totalQueued
total queued 
 
Mac48Address GetOriginatorAddress() const 
Get originator address value. 
 
bool PeekPacketTag(Tag &tag) const 
Search a matching tag and call Tag::Deserialize if it is found. 
 
Time GetPerrMinInterval()
Get PERR minimum interval function. 
 
Ptr< MeshPointDevice > GetMeshPoint() const 
Each mesh protocol must be installed on the mesh point to work. 
 
uint8_t m_unicastPerrThreshold
 
std::vector< QueuedPacket > m_rqueue
Packet Queue. 
 
std::vector< std::pair< uint32_t, Mac48Address > > GetPerrReceivers(std::vector< FailedDestination > failedDest)
Get PERR receivers. 
 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
 
int64_t GetMicroSeconds(void) const 
Get an approximation of the time stored in this instance in the indicated unit. 
 
std::vector< HwmpProtocol::FailedDestination > GetUnreachableDestinations(Mac48Address peerAddress)
When peer link with a given MAC-address fails - it returns list of unreachable destination addresses...
 
void RetryPathDiscovery(Mac48Address dst, uint8_t numOfRetry)
Generates PREQ retry when retry timeout has expired and route is still unresolved. 
 
Ptr< MeshPointDevice > m_mp
Host mesh point. 
 
void IncrementMetric(uint32_t metric)
Handle Metric: 
 
AttributeValue implementation for Time. 
 
void DoDispose()
Destructor implementation. 
 
Mac48Address destination
route destination 
 
Hybrid wireless mesh protocol – a mesh routing protocol defined in IEEE 802.11-2012 standard...
 
See 7.3.2.96 of 802.11s draft 2.07. 
 
Hold an unsigned integer type. 
 
PrecursorList GetPrecursors(Mac48Address destination)
 
bool ForwardUnicast(uint32_t sourceIface, const Mac48Address source, const Mac48Address destination, Ptr< Packet > packet, uint16_t protocolType, RouteReplyCallback routeReply, uint32_t ttl)
Like RequestRoute, but for unicast packets. 
 
uint32_t seqnum
sequence number of route 
 
Packet waiting its routing information. 
 
Hold together all Wifi-related objects. 
 
static Mac48Address GetBroadcast(void)
 
void ProactivePathResolved()
 
HwmpProtocolMacMap m_interfaces
interfaces 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
uint32_t GetOriginatorSeqNumber() const 
Get originator sequence numnber value. 
 
uint32_t GetActivePathLifetime()
Get active path lifetime function. 
 
void AddPrecursor(Mac48Address destination, uint32_t precursorInterface, Mac48Address precursorAddress, Time lifetime)
 
uint16_t totalDropped
total dropped 
 
Ptr< HwmpRtable > m_rtable
Routing table. 
 
void SetOriginatorAddress(Mac48Address originator_address)
Set originator address value. 
 
void SetLifetime(uint32_t lifetime)
Set lifetime function. 
 
static TypeId GetTypeId()
Get the type ID. 
 
uint16_t initiatedPerr
initiated PERR 
 
uint8_t m_unicastPreqThreshold
 
LookupResult LookupProactiveExpired()
Return all proactive paths, including expired. 
 
void ReceivePreq(IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric)
Handler for receiving Path Request. 
 
uint32_t m_dataSeqno
data sequence no 
 
Time m_randomStart
Random start in Proactive PREQ propagation. 
 
Mac48Address GetAddress()
 
static Mac48Address ConvertFrom(const Address &address)
 
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
 
uint32_t m_hwmpSeqno
HWMP sequence no. 
 
void SetOriginatorSeqNumber(uint32_t originator_seq_number)
Set originator sequence number. 
 
uint16_t protocol
protocol number 
 
void SetMetric(uint32_t metric)
Set metric function. 
 
Mac48Address m_address
address 
 
uint8_t m_dot11MeshHWMPmaxPREQretries
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
void AddDestinationAddressElement(bool doFlag, bool rfFlag, Mac48Address dest_address, uint32_t dest_seq_number)
Add a destination address unit: flags, destination and sequence number. 
 
void AddReactivePath(Mac48Address destination, Mac48Address retransmitter, uint32_t interface, uint32_t metric, Time lifetime, uint32_t seqnum)
 
uint16_t initiatedPrep
initiated PREP 
 
Ptr< const AttributeChecker > MakeBooleanChecker(void)
 
uint32_t GetNextPreqId()
Get next period function. 
 
void DelDestinationAddressElement(Mac48Address dest_address)
Delete a destination address unit by destination. 
 
PathError MakePathError(std::vector< FailedDestination > destinations)
forms a path error information element when list of destination fails on a given interface ...
 
std::vector< std::pair< uint32_t, Mac48Address > > receivers
list of PathError receivers (in case of unicast PERR) 
 
bool IsNeedNotPrep() const 
Check whether Proactive PREP subfield to off. 
 
uint32_t GetNextHwmpSeqno()
Get next HWMP sequence no function. 
 
uint8_t GetDestCount() const 
Get destination count. 
 
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
static Time Now(void)
Return the current simulation virtual time. 
 
std::vector< Ptr< DestinationAddressUnit > > GetDestinationList()
Get all destinations, which are stored in PREQ: 
 
uint32_t txBytes
transmit bytes 
 
Ptr< HwmpRtable > GetRoutingTable(void) const 
Get pointer to HWMP routing table. 
 
RouteReplyCallback reply
how to reply 
 
uint32_t m_preqId
PREQ ID. 
 
Interface for L2 mesh routing protocol and mesh point communication. 
 
uint8_t GetTtl()
Get the TTL value. 
 
void ReceivePerr(std::vector< FailedDestination > destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp)
Handler for receiving Path Error. 
 
void Report(std::ostream &) const 
Statistics: 
 
uint32_t metric
metric of route 
 
Mac48Address dst
dst address 
 
void DeleteProactivePath()
 
Ptr< UniformRandomVariable > m_coefficient
Random variable for random start time. 
 
uint8_t GetUnicastPerrThreshold()
Get unicast PERR threshold function. 
 
EventId m_proactivePreqTimer
proactive PREQ timer 
 
Mac48Address retransmitter
retransmitter 
 
Time m_dot11MeshHWMPactivePathTimeout
 
std::vector< Mac48Address > GetBroadcastReceivers(uint32_t interface)
Get broadcast receivers. 
 
std::vector< FailedDestination > destinations
destination list: Mac48Address and sequence number 
 
Time m_dot11MeshHWMPpathToRootInterval
 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
 
uint16_t txUnicast
transmit unicast 
 
void DecrementTtl()
Decrement TTL. 
 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
 
Time Seconds(double value)
Construct a Time in the indicated unit. 
 
Callback< std::vector< Mac48Address >, uint32_t > m_neighboursCallback
neighbors callback 
 
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method. 
 
uint32_t GetLifetime() const 
Get lifetime function. 
 
std::map< Mac48Address, uint32_t > m_lastDataSeqno
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address ...
 
Ptr< T > CreateObject(void)
Create an object by type, with varying number of constructor parameters. 
 
void DeleteReactivePath(Mac48Address destination)
 
QueuedPacket DequeueFirstPacketByDst(Mac48Address dst)
 
Time GetPreqMinInterval()
Get PREQ minimum interval function. 
 
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit. 
 
void AddProactivePath(uint32_t metric, Mac48Address root, Mac48Address retransmitter, uint32_t interface, Time lifetime, uint32_t seqnum)
 
TracedCallback< struct RouteChange > m_routeChangeTraceSource
Route change trace source. 
 
uint32_t GetMetric() const 
Get metric value. 
 
void SetSeqno(uint32_t seqno)
Set sequence number. 
 
uint32_t inInterface
incoming device interface ID. (if packet has come from upper layers, this is Mesh point ID) ...
 
bool QueuePacket(QueuedPacket packet)
 
uint32_t GetMetric() const 
Get metric function. 
 
bool ShouldSendPreq(Mac48Address dst)
checks when the last path discovery procedure was started for a given destination. 
 
This class can be used to hold variables of floating point type such as 'double' or 'float'...
 
void SetDestinationSeqNumber(uint32_t dest_seq_number)
Set destination sequence number function. 
 
void SetHopcount(uint8_t hopcount)
Set hop count function. 
 
void PeerLinkStatus(Mac48Address meshPontAddress, Mac48Address peerAddress, uint32_t interface, bool status)
Peer link status function. 
 
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful. 
 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
void ResetStats()
Reset Statistics: 
 
uint32_t interface
interface index 
 
a unique identifier for an interface. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
Basic MAC of mesh point Wi-Fi interface. 
 
void SetHopcount(uint8_t hopcount)
Set number of hops from originator to mesh STA transmitting this element. 
 
std::map< Mac48Address, PreqEvent > m_preqTimeouts
PREQ timeouts. 
 
bool GetDoFlag()
Get do flag function. 
 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
 
Time m_dot11MeshHWMPnetDiameterTraversalTime
 
LookupResult LookupProactive()
Find proactive path to tree root. Note that calling this method has side effect of deleting expired p...
 
Structure to encapsulate route change information. 
 
void SetNeighboursCallback(Callback< std::vector< Mac48Address >, uint32_t > cb)
This callback is used to obtain active neighbours on a given interface. 
 
virtual void DoInitialize()
Initialize() implementation.