Hybrid wireless mesh protocol – a mesh routing protocol defined in IEEE 802.11-2012 standard. More...
#include "hwmp-protocol.h"
Classes | |
struct | FailedDestination |
structure of unreachable destination - address and sequence number More... | |
struct | PathError |
Structure of path error: IePerr and list of receivers: interfaces and MAC address. More... | |
struct | PreqEvent |
PreqEvent structure. More... | |
struct | QueuedPacket |
Packet waiting its routing information. More... | |
struct | Statistics |
Statistics structure. More... | |
Public Member Functions | |
HwmpProtocol () | |
HwmpProtocol (const HwmpProtocol &)=delete | |
~HwmpProtocol () override | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. | |
void | DoDispose () override |
Destructor implementation. | |
Ptr< HwmpRtable > | GetRoutingTable () const |
Get pointer to HWMP routing table. | |
bool | Install (Ptr< MeshPointDevice > mp) |
Install HWMP on given mesh point. | |
HwmpProtocol & | operator= (const HwmpProtocol &)=delete |
void | PeerLinkStatus (Mac48Address meshPointAddress, Mac48Address peerAddress, uint32_t interface, bool status) |
Peer link status function. | |
bool | RemoveRoutingStuff (uint32_t fromIface, const Mac48Address source, const Mac48Address destination, Ptr< Packet > packet, uint16_t &protocolType) override |
Clean HWMP packet tag from packet; only the packet parameter is used. | |
bool | RequestRoute (uint32_t sourceIface, const Mac48Address source, const Mac48Address destination, Ptr< const Packet > packet, uint16_t protocolType, RouteReplyCallback routeReply) override |
Route request, inherited from MeshL2RoutingProtocol. | |
void | SetNeighboursCallback (Callback< std::vector< Mac48Address >, uint32_t > cb) |
This callback is used to obtain active neighbours on a given interface. | |
Proactive PREQ mechanism: | |
Set the current node as root | |
void | SetRoot () |
Unset the current node as root. | |
void | UnsetRoot () |
Unset the current node as root. | |
void | Report (std::ostream &os) const |
Statistics: | |
void | ResetStats () |
Reset Statistics: | |
Public Member Functions inherited from ns3::MeshL2RoutingProtocol | |
~MeshL2RoutingProtocol () override | |
virtual D-tor for subclasses | |
Ptr< MeshPointDevice > | GetMeshPoint () const |
Each mesh protocol must be installed on the mesh point to work. | |
virtual bool | RemoveRoutingStuff (uint32_t fromIface, const Mac48Address source, const Mac48Address destination, Ptr< Packet > packet, uint16_t &protocolType)=0 |
When packet is ready to go to upper layer, protocol must remove all its information: tags, header, etc. | |
virtual bool | RequestRoute (uint32_t sourceIface, const Mac48Address source, const Mac48Address destination, Ptr< const Packet > packet, uint16_t protocolType, RouteReplyCallback routeReply)=0 |
Request routing information, all packets must go through this request. | |
void | SetMeshPoint (Ptr< MeshPointDevice > mp) |
Set host mesh point, analog of SetNode (...) methods for upper layer protocols. | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
virtual TypeId | GetInstanceTypeId () const =0 |
Get the most derived TypeId for this Object. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::MeshL2RoutingProtocol | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Private Types | |
typedef std::map< uint32_t, Ptr< HwmpProtocolMac > > | HwmpProtocolMacMap |
HwmpProtocolMacMap typedef. | |
typedef TracedCallback< RouteChange > | RouteChangeTracedCallback |
RouteChangeTracedCallback typedef. | |
Private Member Functions | |
void | DoInitialize () override |
Initialize() implementation. | |
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. | |
Mac48Address | GetAddress () |
Interaction with HWMP MAC plugin | |
void | ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric) |
Handler for receiving Path Request. | |
void | ReceivePrep (IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric) |
Handler for receiving Path Reply. | |
void | ReceivePerr (std::vector< FailedDestination > destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp) |
Handler for receiving Path Error. | |
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. | |
PathError | MakePathError (std::vector< FailedDestination > destinations) |
forms a path error information element when list of destination fails on a given interface | |
void | ForwardPathError (PathError perr) |
Forwards a received path error. | |
void | InitiatePathError (PathError perr) |
Passes a self-generated PERR to interface-plugin. | |
std::vector< std::pair< uint32_t, Mac48Address > > | GetPerrReceivers (std::vector< FailedDestination > failedDest) |
Get PERR receivers. | |
std::vector< Mac48Address > | GetPreqReceivers (uint32_t interface) |
Get PREQ receivers. | |
std::vector< Mac48Address > | GetBroadcastReceivers (uint32_t interface) |
Get broadcast receivers. | |
bool | DropDataFrame (uint32_t seqno, Mac48Address source) |
MAC-plugin asks whether the frame can be dropped. | |
bool | QueuePacket (QueuedPacket packet) |
Queue a packet. | |
QueuedPacket | DequeueFirstPacketByDst (Mac48Address dst) |
Dequeue the first packet for a given destination. | |
QueuedPacket | DequeueFirstPacket () |
Dequeue the first packet in the queue. | |
void | ReactivePathResolved (Mac48Address dst) |
Signal the protocol that the reactive path toward a destination is now available. | |
void | ProactivePathResolved () |
Signal the protocol that the proactive path is now available. | |
Methods responsible for path discovery retry procedure: | |
bool | ShouldSendPreq (Mac48Address dst) |
checks when the last path discovery procedure was started for a given destination. | |
void | RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry) |
Generates PREQ retry when retry timeout has expired and route is still unresolved. | |
void | SendProactivePreq () |
Proactive Preq routines: | |
Methods needed by HwmpMacLugin to access protocol parameters: | |
bool | GetDoFlag () const |
Get do flag function. | |
bool | GetRfFlag () const |
Get rf flag function. | |
Time | GetPreqMinInterval () |
Get PREQ minimum interval function. | |
Time | GetPerrMinInterval () |
Get PERR minimum interval function. | |
uint8_t | GetMaxTtl () const |
Get maximum TTL function. | |
uint32_t | GetNextPreqId () |
Get next period function. | |
uint32_t | GetNextHwmpSeqno () |
Get next HWMP sequence no function. | |
uint32_t | GetActivePathLifetime () |
Get active path lifetime function. | |
uint8_t | GetUnicastPerrThreshold () const |
Get unicast PERR threshold function. | |
Private Attributes | |
Mac48Address | m_address |
address | |
Ptr< UniformRandomVariable > | m_coefficient |
Random variable for random start time. | |
uint32_t | m_dataSeqno |
data sequence no | |
uint32_t | m_hwmpSeqno |
HWMP sequence no. | |
HwmpProtocolMacMap | m_interfaces |
interfaces | |
Callback< std::vector< Mac48Address >, uint32_t > | m_neighboursCallback |
neighbors callback | |
uint32_t | m_preqId |
PREQ ID. | |
std::map< Mac48Address, PreqEvent > | m_preqTimeouts |
PREQ timeouts. | |
EventId | m_proactivePreqTimer |
proactive PREQ timer | |
Time | m_randomStart |
Random start in Proactive PREQ propagation. | |
TracedCallback< RouteChange > | m_routeChangeTraceSource |
Route change trace source. | |
TracedCallback< Time > | m_routeDiscoveryTimeCallback |
Route discovery time: | |
std::vector< QueuedPacket > | m_rqueue |
Packet Queue. | |
Ptr< HwmpRtable > | m_rtable |
Routing table. | |
Statistics | m_stats |
statistics | |
Sequence number filters | |
Data sequence number database | |
std::map< Mac48Address, uint32_t > | m_lastDataSeqno |
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address | |
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 | |
HWMP-protocol parameters | |
These are all Attributes | |
uint16_t | m_maxQueueSize |
Maximum number of packets we can store when resolving route. | |
uint8_t | m_dot11MeshHWMPmaxPREQretries |
Maximum number of retries before we suppose the destination to be unreachable. | |
Time | m_dot11MeshHWMPnetDiameterTraversalTime |
Time we suppose the packet to go from one edge of the network to another. | |
Time | m_dot11MeshHWMPpreqMinInterval |
Minimal interval between to successive PREQs. | |
Time | m_dot11MeshHWMPperrMinInterval |
Minimal interval between to successive PREQs. | |
Time | m_dot11MeshHWMPactiveRootTimeout |
Lifetime of proactive routing information. | |
Time | m_dot11MeshHWMPactivePathTimeout |
Lifetime of reactive routing information. | |
Time | m_dot11MeshHWMPpathToRootInterval |
Interval between two successive proactive PREQs. | |
Time | m_dot11MeshHWMPrannInterval |
Lifetime of proactive routing information. | |
bool | m_isRoot |
True if the node is a root. | |
uint8_t | m_maxTtl |
Initial value of Time To Live field. | |
uint8_t | m_unicastPerrThreshold |
Maximum number of PERR receivers, when we send a PERR as a chain of unicasts. | |
uint8_t | m_unicastPreqThreshold |
Maximum number of PREQ receivers, when we send a PREQ as a chain of unicasts. | |
uint8_t | m_unicastDataThreshold |
Maximum number of broadcast receivers, when we send a broadcast as a chain of unicasts. | |
bool | m_doFlag |
Destination only HWMP flag. | |
bool | m_rfFlag |
Reply and forward flag. | |
Friends | |
class | HwmpProtocolMac |
allow HwmpProtocolMac class friend access | |
Additional Inherited Members | |
Public Types inherited from ns3::MeshL2RoutingProtocol | |
typedef Callback< void, bool, Ptr< Packet >, Mac48Address, Mac48Address, uint16_t, uint32_t > | RouteReplyCallback |
Callback to be invoked when route discovery procedure is completed. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoDispose () |
Destructor implementation. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Protected Attributes inherited from ns3::MeshL2RoutingProtocol | |
Ptr< MeshPointDevice > | m_mp |
Host mesh point. | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Hybrid wireless mesh protocol – a mesh routing protocol defined in IEEE 802.11-2012 standard.
ns3::dot11s::HwmpProtocol is accessible through the following paths with Config::Set and Config::Connect:
Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Size of this type is 464 bytes (on a 64-bit architecture).
Definition at line 67 of file hwmp-protocol.h.
|
private |
HwmpProtocolMacMap typedef.
Definition at line 221 of file hwmp-protocol.h.
RouteChangeTracedCallback typedef.
Definition at line 358 of file hwmp-protocol.h.
ns3::dot11s::HwmpProtocol::HwmpProtocol | ( | ) |
Definition at line 155 of file hwmp-protocol.cc.
References m_coefficient, and NS_LOG_FUNCTION.
|
override |
Definition at line 182 of file hwmp-protocol.cc.
References NS_LOG_FUNCTION.
|
delete |
int64_t ns3::dot11s::HwmpProtocol::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
Return the number of streams (possibly zero) that have been assigned.
stream | first stream index to use |
Definition at line 1378 of file hwmp-protocol.cc.
References m_coefficient, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
private |
Dequeue the first packet in the queue.
Definition at line 1037 of file hwmp-protocol.cc.
References m_rqueue, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::QueuedPacket::pkt.
Referenced by ProactivePathResolved().
|
private |
Dequeue the first packet for a given destination.
dst | the destination |
Definition at line 1019 of file hwmp-protocol.cc.
References m_rqueue, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::QueuedPacket::pkt.
Referenced by ReactivePathResolved(), and RetryPathDiscovery().
|
overridevirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 201 of file hwmp-protocol.cc.
References ns3::EventId::Cancel(), m_hwmpSeqnoMetricDatabase, m_interfaces, m_lastDataSeqno, ns3::MeshL2RoutingProtocol::m_mp, m_preqTimeouts, m_proactivePreqTimer, m_rqueue, m_rtable, and NS_LOG_FUNCTION.
|
overrideprivatevirtual |
Initialize() implementation.
This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.
Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 188 of file hwmp-protocol.cc.
References ns3::Time::GetSeconds(), ns3::UniformRandomVariable::GetValue(), m_coefficient, m_isRoot, m_proactivePreqTimer, m_randomStart, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), ns3::Seconds(), SendProactivePreq(), and ns3::ObjectBase::SetAttribute().
|
private |
MAC-plugin asks whether the frame can be dropped.
Protocol automatically updates seqno.
seqno | is the sequence number of source |
source | is the source address |
Definition at line 836 of file hwmp-protocol.cc.
References GetAddress(), m_lastDataSeqno, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
|
private |
Forwards a received path error.
perr | the path error |
Definition at line 907 of file hwmp-protocol.cc.
References ns3::Time::As(), ns3::dot11s::HwmpProtocol::PathError::destinations, ns3::dot11s::HwmpProtocolMac::ForwardPerr(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), m_interfaces, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::PathError::receivers, ns3::Simulator::Schedule(), and ns3::Time::US.
Referenced by ReceivePerr().
|
private |
Like RequestRoute, but for unicast packets.
sourceIface | the source interface |
source | the source address |
destination | the destination address |
packet | the packet to route |
protocolType | the protocol type |
routeReply | the route reply callback |
ttl | the TTL |
Definition at line 332 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpProtocol::QueuedPacket::dst, GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), GetNextHwmpSeqno(), ns3::dot11s::HwmpRtable::GetUnreachableDestinations(), ns3::dot11s::HwmpRtable::LookupResult::ifIndex, ns3::dot11s::HwmpProtocol::QueuedPacket::inInterface, ns3::dot11s::HwmpProtocol::Statistics::initiatedPreq, InitiatePathError(), ns3::dot11s::HwmpRtable::LookupProactive(), ns3::dot11s::HwmpRtable::LookupProactiveExpired(), ns3::dot11s::HwmpRtable::LookupReactive(), ns3::dot11s::HwmpRtable::LookupReactiveExpired(), m_interfaces, m_rtable, m_stats, MakePathError(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::QueuedPacket::pkt, ns3::dot11s::HwmpProtocol::QueuedPacket::protocol, QueuePacket(), ns3::dot11s::HwmpProtocol::QueuedPacket::reply, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::dot11s::HwmpRtable::LookupResult::seqnum, ns3::dot11s::HwmpTag::SetAddress(), ns3::dot11s::HwmpTag::SetTtl(), ShouldSendPreq(), ns3::dot11s::HwmpProtocol::QueuedPacket::src, ns3::dot11s::HwmpProtocol::Statistics::totalDropped, ns3::dot11s::HwmpProtocol::Statistics::totalQueued, ns3::dot11s::HwmpProtocol::Statistics::txBytes, and ns3::dot11s::HwmpProtocol::Statistics::txUnicast.
Referenced by RequestRoute().
|
private |
Get active path lifetime function.
Definition at line 1261 of file hwmp-protocol.cc.
References ns3::Time::GetMicroSeconds(), and m_dot11MeshHWMPactivePathTimeout.
|
private |
Definition at line 1273 of file hwmp-protocol.cc.
References m_address.
Referenced by DropDataFrame(), ForwardUnicast(), ReceivePerr(), ReceivePrep(), ReceivePreq(), and SendProactivePreq().
|
private |
Get broadcast receivers.
interface |
Definition at line 990 of file hwmp-protocol.cc.
References ns3::Mac48Address::GetBroadcast(), m_neighboursCallback, m_unicastDataThreshold, and NS_LOG_FUNCTION.
Referenced by RequestRoute().
|
private |
Get do flag function.
Definition at line 1217 of file hwmp-protocol.cc.
References m_doFlag.
|
private |
Get maximum TTL function.
Definition at line 1241 of file hwmp-protocol.cc.
References m_maxTtl.
|
private |
Get next HWMP sequence no function.
Definition at line 1254 of file hwmp-protocol.cc.
References m_hwmpSeqno.
Referenced by ForwardUnicast(), ReceivePreq(), RetryPathDiscovery(), and SendProactivePreq().
|
private |
Get next period function.
Definition at line 1247 of file hwmp-protocol.cc.
References m_preqId.
Referenced by SendProactivePreq().
|
private |
Get PERR minimum interval function.
Definition at line 1235 of file hwmp-protocol.cc.
References m_dot11MeshHWMPperrMinInterval.
|
private |
Get PERR receivers.
failedDest |
Definition at line 932 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::DeleteProactivePath(), ns3::dot11s::HwmpRtable::DeleteReactivePath(), ns3::dot11s::RouteChange::destination, ns3::dot11s::HwmpRtable::GetPrecursors(), m_routeChangeTraceSource, m_rtable, NS_LOG_FUNCTION, ns3::dot11s::RouteChange::seqnum, and ns3::dot11s::RouteChange::type.
Referenced by MakePathError().
|
private |
Get PREQ minimum interval function.
Definition at line 1229 of file hwmp-protocol.cc.
References m_dot11MeshHWMPpreqMinInterval.
|
private |
Get PREQ receivers.
interface |
Definition at line 973 of file hwmp-protocol.cc.
References ns3::Mac48Address::GetBroadcast(), m_neighboursCallback, m_unicastPreqThreshold, and NS_LOG_FUNCTION.
|
private |
Get rf flag function.
Definition at line 1223 of file hwmp-protocol.cc.
References m_rfFlag.
Ptr< HwmpRtable > ns3::dot11s::HwmpProtocol::GetRoutingTable | ( | ) | const |
Get pointer to HWMP routing table.
Definition at line 1386 of file hwmp-protocol.cc.
References m_rtable.
|
static |
Get the type ID.
Definition at line 52 of file hwmp-protocol.cc.
References m_doFlag, m_dot11MeshHWMPactivePathTimeout, m_dot11MeshHWMPactiveRootTimeout, m_dot11MeshHWMPmaxPREQretries, m_dot11MeshHWMPnetDiameterTraversalTime, m_dot11MeshHWMPpathToRootInterval, m_dot11MeshHWMPperrMinInterval, m_dot11MeshHWMPpreqMinInterval, m_dot11MeshHWMPrannInterval, m_maxQueueSize, m_maxTtl, m_randomStart, m_rfFlag, m_routeChangeTraceSource, m_routeDiscoveryTimeCallback, m_unicastDataThreshold, m_unicastPerrThreshold, m_unicastPreqThreshold, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), ns3::MicroSeconds(), ns3::Seconds(), and ns3::TypeId::SetParent().
|
private |
Get unicast PERR threshold function.
Definition at line 1267 of file hwmp-protocol.cc.
References m_unicastPerrThreshold.
|
private |
Passes a self-generated PERR to interface-plugin.
perr | the path error |
Definition at line 889 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpProtocol::PathError::destinations, m_interfaces, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::PathError::receivers.
Referenced by ForwardUnicast(), and PeerLinkStatus().
bool ns3::dot11s::HwmpProtocol::Install | ( | Ptr< MeshPointDevice > | mp | ) |
Install HWMP on given mesh point.
mp | the MeshPointDevice |
Installing protocol causes installation of its interface MAC plugins.
Also MP aggregates all installed protocols, HWMP protocol can be accessed via MeshPointDevice::GetObject<dot11s::HwmpProtocol>();
Definition at line 778 of file hwmp-protocol.cc.
References ns3::dot11s::AirtimeLinkMetricCalculator::CalculateMetric(), ns3::Mac48Address::ConvertFrom(), m_address, m_interfaces, ns3::MeshL2RoutingProtocol::m_mp, ns3::MakeCallback(), and NS_LOG_FUNCTION.
|
private |
forms a path error information element when list of destination fails on a given interface
destinations | vector of failed destinations |
Definition at line 863 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::DeleteReactivePath(), ns3::dot11s::RouteChange::destination, ns3::dot11s::HwmpProtocol::PathError::destinations, GetPerrReceivers(), ns3::dot11s::HwmpProtocol::Statistics::initiatedPerr, m_routeChangeTraceSource, m_rtable, m_stats, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::PathError::receivers, ns3::dot11s::RouteChange::seqnum, and ns3::dot11s::RouteChange::type.
Referenced by ForwardUnicast(), PeerLinkStatus(), and ReceivePerr().
|
delete |
void ns3::dot11s::HwmpProtocol::PeerLinkStatus | ( | Mac48Address | meshPointAddress, |
Mac48Address | peerAddress, | ||
uint32_t | interface, | ||
bool | status | ||
) |
Peer link status function.
meshPointAddress | The MAC address of the mesh point |
peerAddress | The MAC address of the peer |
interface | The interface number |
status | The status of the peer link |
Definition at line 814 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::GetUnreachableDestinations(), InitiatePathError(), m_rtable, MakePathError(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by ns3::Dot11sStack::InstallStack().
|
private |
Signal the protocol that the proactive path is now available.
Definition at line 1080 of file hwmp-protocol.cc.
References ns3::Packet::AddPacketTag(), DequeueFirstPacket(), ns3::dot11s::HwmpProtocol::QueuedPacket::dst, ns3::Mac48Address::GetBroadcast(), ns3::Packet::GetSize(), ns3::dot11s::HwmpRtable::LookupResult::ifIndex, ns3::dot11s::HwmpRtable::LookupProactive(), m_rtable, m_stats, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::QueuedPacket::pkt, ns3::dot11s::HwmpProtocol::QueuedPacket::protocol, ns3::Packet::RemovePacketTag(), ns3::dot11s::HwmpProtocol::QueuedPacket::reply, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::dot11s::HwmpTag::SetAddress(), ns3::dot11s::HwmpProtocol::QueuedPacket::src, ns3::dot11s::HwmpProtocol::Statistics::txBytes, and ns3::dot11s::HwmpProtocol::Statistics::txUnicast.
Referenced by ReceivePreq().
|
private |
Queue a packet.
packet | the packet to be queued |
Definition at line 1007 of file hwmp-protocol.cc.
References m_maxQueueSize, m_rqueue, and NS_LOG_FUNCTION.
Referenced by ForwardUnicast().
|
private |
Signal the protocol that the reactive path toward a destination is now available.
dst | the destination |
Definition at line 1051 of file hwmp-protocol.cc.
References ns3::Packet::AddPacketTag(), DequeueFirstPacketByDst(), ns3::dot11s::HwmpProtocol::QueuedPacket::dst, ns3::Mac48Address::GetBroadcast(), ns3::Packet::GetSize(), ns3::dot11s::HwmpRtable::LookupResult::ifIndex, ns3::dot11s::HwmpRtable::LookupReactive(), m_preqTimeouts, m_routeDiscoveryTimeCallback, m_rtable, m_stats, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::QueuedPacket::pkt, ns3::dot11s::HwmpProtocol::QueuedPacket::protocol, ns3::Packet::RemovePacketTag(), ns3::dot11s::HwmpProtocol::QueuedPacket::reply, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::dot11s::HwmpTag::SetAddress(), ns3::dot11s::HwmpProtocol::QueuedPacket::src, ns3::dot11s::HwmpProtocol::Statistics::txBytes, and ns3::dot11s::HwmpProtocol::Statistics::txUnicast.
Referenced by ReceivePrep(), and ReceivePreq().
|
private |
Handler for receiving Path Error.
destinations | the list of failed destinations |
from | the from address |
interface | the interface |
fromMp | the from MP address |
Definition at line 726 of file hwmp-protocol.cc.
References ForwardPathError(), GetAddress(), ns3::dot11s::HwmpRtable::LookupResult::ifIndex, ns3::dot11s::HwmpRtable::LookupReactiveExpired(), m_rtable, MakePathError(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, and ns3::dot11s::HwmpRtable::LookupResult::seqnum.
|
private |
Handler for receiving Path Reply.
prep | the IE prep |
from | the from address |
interface | the interface |
fromMp | the 'from MP' address |
metric | the metric |
Definition at line 616 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::AddPrecursor(), ns3::dot11s::HwmpRtable::AddReactivePath(), ns3::Time::As(), ns3::dot11s::RouteChange::destination, GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::dot11s::IePrep::GetDestinationAddress(), ns3::dot11s::IePrep::GetDestinationSeqNumber(), ns3::dot11s::IePrep::GetLifetime(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), ns3::dot11s::IePrep::GetMetric(), ns3::dot11s::IePrep::GetOriginatorAddress(), ns3::dot11s::HwmpRtable::LookupResult::ifIndex, ns3::dot11s::IePrep::IncrementMetric(), ns3::dot11s::RouteChange::interface, ns3::dot11s::RouteChange::lifetime, ns3::dot11s::HwmpRtable::LookupResult::lifetime, ns3::dot11s::HwmpRtable::LookupReactive(), m_hwmpSeqnoMetricDatabase, m_interfaces, m_routeChangeTraceSource, m_rtable, ns3::dot11s::RouteChange::metric, ns3::MicroSeconds(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ReactivePathResolved(), ns3::dot11s::RouteChange::retransmitter, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::Simulator::Schedule(), ns3::dot11s::HwmpProtocolMac::SendPrep(), ns3::dot11s::RouteChange::seqnum, ns3::dot11s::RouteChange::type, and ns3::Time::US.
|
private |
Handler for receiving Path Request.
preq | the IE preq |
from | the from address |
interface | the interface |
fromMp | the 'from MP' address |
metric | the metric |
Definition at line 427 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::AddPrecursor(), ns3::dot11s::HwmpRtable::AddProactivePath(), ns3::dot11s::HwmpRtable::AddReactivePath(), ns3::Time::As(), ns3::dot11s::IePreq::DelDestinationAddressElement(), ns3::dot11s::RouteChange::destination, GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::dot11s::IePreq::GetDestCount(), ns3::dot11s::IePreq::GetDestinationList(), ns3::dot11s::IePreq::GetLifetime(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), ns3::dot11s::IePreq::GetMetric(), ns3::Time::GetMicroSeconds(), GetNextHwmpSeqno(), ns3::dot11s::IePreq::GetOriginatorAddress(), ns3::dot11s::IePreq::GetOriginatorSeqNumber(), ns3::dot11s::IePreq::IncrementMetric(), ns3::dot11s::RouteChange::interface, ns3::dot11s::IePreq::IsNeedNotPrep(), ns3::dot11s::RouteChange::lifetime, ns3::dot11s::HwmpRtable::LookupResult::lifetime, ns3::dot11s::HwmpRtable::LookupProactive(), ns3::dot11s::HwmpRtable::LookupReactive(), m_hwmpSeqnoMetricDatabase, m_interfaces, m_routeChangeTraceSource, m_rtable, ns3::dot11s::RouteChange::metric, ns3::dot11s::HwmpRtable::LookupResult::metric, ns3::MicroSeconds(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ProactivePathResolved(), ReactivePathResolved(), ns3::dot11s::RouteChange::retransmitter, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::Simulator::Schedule(), SendPrep(), ns3::dot11s::HwmpProtocolMac::SendPreq(), ns3::dot11s::RouteChange::seqnum, ns3::dot11s::HwmpRtable::LookupResult::seqnum, ns3::dot11s::RouteChange::type, and ns3::Time::US.
|
overridevirtual |
Clean HWMP packet tag from packet; only the packet parameter is used.
fromIface | the from interface |
source | the source address |
destination | the destination address |
packet | the packet to route |
protocolType | the protocol type |
Implements ns3::MeshL2RoutingProtocol.
Definition at line 317 of file hwmp-protocol.cc.
References NS_FATAL_ERROR.
void ns3::dot11s::HwmpProtocol::Report | ( | std::ostream & | os | ) | const |
Print statistics counters
os | the output stream |
Definition at line 1325 of file hwmp-protocol.cc.
References ns3::Time::GetSeconds(), m_address, m_doFlag, m_dot11MeshHWMPactivePathTimeout, m_dot11MeshHWMPactiveRootTimeout, m_dot11MeshHWMPmaxPREQretries, m_dot11MeshHWMPnetDiameterTraversalTime, m_dot11MeshHWMPpathToRootInterval, m_dot11MeshHWMPperrMinInterval, m_dot11MeshHWMPpreqMinInterval, m_dot11MeshHWMPrannInterval, m_interfaces, m_isRoot, m_maxQueueSize, m_maxTtl, m_rfFlag, m_stats, m_unicastDataThreshold, m_unicastPerrThreshold, m_unicastPreqThreshold, and ns3::dot11s::HwmpProtocol::Statistics::Print().
|
overridevirtual |
Route request, inherited from MeshL2RoutingProtocol.
sourceIface | the source interface |
source | the source address |
destination | the destination address |
packet | the packet to route |
protocolType | the protocol type |
routeReply | the route reply |
Implements ns3::MeshL2RoutingProtocol.
Definition at line 221 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpTag::DecrementTtl(), ns3::dot11s::HwmpProtocol::Statistics::droppedTtl, ForwardUnicast(), ns3::Mac48Address::GetBroadcast(), GetBroadcastReceivers(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), ns3::dot11s::HwmpTag::GetTtl(), m_dataSeqno, m_interfaces, m_maxTtl, m_stats, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dot11s::HwmpTag::SetAddress(), ns3::dot11s::HwmpTag::SetSeqno(), ns3::dot11s::HwmpTag::SetTtl(), ns3::dot11s::HwmpProtocol::Statistics::txBroadcast, and ns3::dot11s::HwmpProtocol::Statistics::txBytes.
void ns3::dot11s::HwmpProtocol::ResetStats | ( | ) |
Reset Statistics:
Definition at line 1365 of file hwmp-protocol.cc.
References m_interfaces, m_stats, and NS_LOG_FUNCTION.
|
private |
Generates PREQ retry when retry timeout has expired and route is still unresolved.
dst | is the destination address |
numOfRetry | is the number of retries |
When PREQ retry has achieved the maximum level - retry mechanism should be canceled
Definition at line 1125 of file hwmp-protocol.cc.
References DequeueFirstPacketByDst(), ns3::dot11s::HwmpProtocol::QueuedPacket::dst, ns3::Mac48Address::GetBroadcast(), GetNextHwmpSeqno(), ns3::dot11s::HwmpRtable::LookupProactive(), ns3::dot11s::HwmpRtable::LookupReactive(), ns3::dot11s::HwmpRtable::LookupReactiveExpired(), m_dot11MeshHWMPmaxPREQretries, m_dot11MeshHWMPnetDiameterTraversalTime, m_interfaces, m_preqTimeouts, m_routeDiscoveryTimeCallback, m_rtable, m_stats, ns3::dot11s::HwmpRtable::MAX_METRIC, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, ns3::dot11s::HwmpProtocol::QueuedPacket::pkt, ns3::dot11s::HwmpProtocol::QueuedPacket::protocol, ns3::dot11s::HwmpProtocol::QueuedPacket::reply, ns3::dot11s::HwmpRtable::LookupResult::retransmitter, RetryPathDiscovery(), ns3::Simulator::Schedule(), ns3::dot11s::HwmpRtable::LookupResult::seqnum, ns3::dot11s::HwmpProtocol::QueuedPacket::src, and ns3::dot11s::HwmpProtocol::Statistics::totalDropped.
Referenced by RetryPathDiscovery(), and ShouldSendPreq().
|
private |
Send Path Reply.
src | the source address |
dst | the destination address |
retransmitter | the retransmitter address |
initMetric | the initial metric |
originatorDsn | the originator DSN |
destinationSN | the destination DSN |
lifetime | the lifetime |
interface | the interface |
Definition at line 753 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpProtocol::Statistics::initiatedPrep, m_interfaces, m_maxTtl, m_stats, NS_ASSERT, ns3::dot11s::IePrep::SetDestinationAddress(), ns3::dot11s::IePrep::SetDestinationSeqNumber(), ns3::dot11s::IePrep::SetHopcount(), ns3::dot11s::IePrep::SetLifetime(), ns3::dot11s::IePrep::SetMetric(), ns3::dot11s::IePrep::SetOriginatorAddress(), ns3::dot11s::IePrep::SetOriginatorSeqNumber(), and ns3::dot11s::IePrep::SetTtl().
Referenced by ReceivePreq().
|
private |
Proactive Preq routines:
Definition at line 1193 of file hwmp-protocol.cc.
References ns3::dot11s::IePreq::AddDestinationAddressElement(), GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::Time::GetMicroSeconds(), GetNextHwmpSeqno(), GetNextPreqId(), m_dot11MeshHWMPactiveRootTimeout, m_dot11MeshHWMPpathToRootInterval, m_interfaces, m_maxTtl, m_proactivePreqTimer, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), SendProactivePreq(), ns3::dot11s::IePreq::SetHopcount(), ns3::dot11s::IePreq::SetLifetime(), ns3::dot11s::IePreq::SetOriginatorAddress(), ns3::dot11s::IePreq::SetOriginatorSeqNumber(), ns3::dot11s::IePreq::SetPreqID(), and ns3::dot11s::IePreq::SetTTL().
Referenced by DoInitialize(), and SendProactivePreq().
void ns3::dot11s::HwmpProtocol::SetNeighboursCallback | ( | Callback< std::vector< Mac48Address >, uint32_t > | cb | ) |
This callback is used to obtain active neighbours on a given interface.
cb | is a callback, which returns a list of addresses on given interface (uint32_t) |
Definition at line 830 of file hwmp-protocol.cc.
References m_neighboursCallback.
void ns3::dot11s::HwmpProtocol::SetRoot | ( | ) |
Unset the current node as root.
Definition at line 1178 of file hwmp-protocol.cc.
References m_address, m_isRoot, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
|
private |
checks when the last path discovery procedure was started for a given destination.
dst | is the destination address |
If the retry counter has not achieved the maximum level - preq should not be sent
Definition at line 1106 of file hwmp-protocol.cc.
References m_dot11MeshHWMPnetDiameterTraversalTime, m_preqTimeouts, ns3::Simulator::Now(), NS_LOG_FUNCTION, RetryPathDiscovery(), and ns3::Simulator::Schedule().
Referenced by ForwardUnicast().
void ns3::dot11s::HwmpProtocol::UnsetRoot | ( | ) |
Unset the current node as root.
Definition at line 1186 of file hwmp-protocol.cc.
References ns3::EventId::Cancel(), m_proactivePreqTimer, and NS_LOG_FUNCTION.
|
friend |
allow HwmpProtocolMac class friend access
Definition at line 190 of file hwmp-protocol.h.
|
private |
address
Definition at line 492 of file hwmp-protocol.h.
Referenced by GetAddress(), Install(), Report(), and SetRoot().
|
private |
Random variable for random start time.
coefficient
Definition at line 548 of file hwmp-protocol.h.
Referenced by HwmpProtocol(), AssignStreams(), and DoInitialize().
|
private |
|
private |
Destination only HWMP flag.
Definition at line 543 of file hwmp-protocol.h.
Referenced by GetDoFlag(), GetTypeId(), and Report().
|
private |
Lifetime of reactive routing information.
Definition at line 532 of file hwmp-protocol.h.
Referenced by GetActivePathLifetime(), GetTypeId(), and Report().
|
private |
Lifetime of proactive routing information.
Definition at line 531 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and SendProactivePreq().
|
private |
Maximum number of retries before we suppose the destination to be unreachable.
Definition at line 525 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and RetryPathDiscovery().
|
private |
Time we suppose the packet to go from one edge of the network to another.
Definition at line 527 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), RetryPathDiscovery(), and ShouldSendPreq().
|
private |
Interval between two successive proactive PREQs.
Definition at line 533 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and SendProactivePreq().
|
private |
Minimal interval between to successive PREQs.
Definition at line 530 of file hwmp-protocol.h.
Referenced by GetPerrMinInterval(), GetTypeId(), and Report().
|
private |
Minimal interval between to successive PREQs.
Definition at line 529 of file hwmp-protocol.h.
Referenced by GetPreqMinInterval(), GetTypeId(), and Report().
|
private |
Lifetime of proactive routing information.
Definition at line 534 of file hwmp-protocol.h.
Referenced by GetTypeId(), and Report().
|
private |
|
private |
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address
Definition at line 501 of file hwmp-protocol.h.
Referenced by DoDispose(), ReceivePrep(), and ReceivePreq().
|
private |
interfaces
Definition at line 491 of file hwmp-protocol.h.
Referenced by DoDispose(), ForwardPathError(), ForwardUnicast(), InitiatePathError(), Install(), ReceivePrep(), ReceivePreq(), Report(), RequestRoute(), ResetStats(), RetryPathDiscovery(), SendPrep(), and SendProactivePreq().
|
private |
True if the node is a root.
Definition at line 535 of file hwmp-protocol.h.
Referenced by DoInitialize(), Report(), and SetRoot().
|
private |
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address
Definition at line 499 of file hwmp-protocol.h.
Referenced by DoDispose(), and DropDataFrame().
|
private |
Maximum number of packets we can store when resolving route.
Definition at line 524 of file hwmp-protocol.h.
Referenced by GetTypeId(), QueuePacket(), and Report().
|
private |
Initial value of Time To Live field.
Definition at line 536 of file hwmp-protocol.h.
Referenced by GetMaxTtl(), GetTypeId(), Report(), RequestRoute(), SendPrep(), and SendProactivePreq().
|
private |
neighbors callback
Definition at line 549 of file hwmp-protocol.h.
Referenced by GetBroadcastReceivers(), GetPreqReceivers(), and SetNeighboursCallback().
|
private |
|
private |
PREQ timeouts.
Definition at line 514 of file hwmp-protocol.h.
Referenced by DoDispose(), ReactivePathResolved(), RetryPathDiscovery(), and ShouldSendPreq().
|
private |
proactive PREQ timer
Definition at line 515 of file hwmp-protocol.h.
Referenced by DoDispose(), DoInitialize(), SendProactivePreq(), and UnsetRoot().
|
private |
Random start in Proactive PREQ propagation.
Definition at line 517 of file hwmp-protocol.h.
Referenced by DoInitialize(), and GetTypeId().
|
private |
Reply and forward flag.
Definition at line 544 of file hwmp-protocol.h.
Referenced by GetRfFlag(), GetTypeId(), and Report().
|
private |
Route change trace source.
Definition at line 360 of file hwmp-protocol.h.
Referenced by GetPerrReceivers(), GetTypeId(), MakePathError(), ReceivePrep(), and ReceivePreq().
|
private |
Route discovery time:
Definition at line 356 of file hwmp-protocol.h.
Referenced by GetTypeId(), ReactivePathResolved(), and RetryPathDiscovery().
|
private |
Definition at line 519 of file hwmp-protocol.h.
Referenced by DequeueFirstPacket(), DequeueFirstPacketByDst(), DoDispose(), and QueuePacket().
|
private |
Routing table.
Definition at line 505 of file hwmp-protocol.h.
Referenced by DoDispose(), ForwardUnicast(), GetPerrReceivers(), GetRoutingTable(), MakePathError(), PeerLinkStatus(), ProactivePathResolved(), ReactivePathResolved(), ReceivePerr(), ReceivePrep(), ReceivePreq(), and RetryPathDiscovery().
|
private |
statistics
Definition at line 489 of file hwmp-protocol.h.
Referenced by ForwardUnicast(), MakePathError(), ProactivePathResolved(), ReactivePathResolved(), Report(), RequestRoute(), ResetStats(), RetryPathDiscovery(), and SendPrep().
|
private |
Maximum number of broadcast receivers, when we send a broadcast as a chain of unicasts.
Definition at line 541 of file hwmp-protocol.h.
Referenced by GetBroadcastReceivers(), GetTypeId(), and Report().
|
private |
Maximum number of PERR receivers, when we send a PERR as a chain of unicasts.
Definition at line 537 of file hwmp-protocol.h.
Referenced by GetTypeId(), GetUnicastPerrThreshold(), and Report().
|
private |
Maximum number of PREQ receivers, when we send a PREQ as a chain of unicasts.
Definition at line 539 of file hwmp-protocol.h.
Referenced by GetPreqReceivers(), GetTypeId(), and Report().