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 Types | |
typedef struct FailedDestination | FailedDestination |
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. More... | |
Public Member Functions | |
HwmpProtocol () | |
~HwmpProtocol () | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. More... | |
void | DoDispose () |
Destructor implementation. More... | |
Ptr< HwmpRtable > | GetRoutingTable (void) const |
Get pointer to HWMP routing table. More... | |
bool | Install (Ptr< MeshPointDevice >) |
Install HWMP on given mesh point. More... | |
void | PeerLinkStatus (Mac48Address meshPontAddress, Mac48Address peerAddress, uint32_t interface, bool status) |
Peer link status function. More... | |
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. More... | |
void | Report (std::ostream &) const |
Statistics: More... | |
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. More... | |
void | ResetStats () |
Reset Statistics: More... | |
void | SetNeighboursCallback (Callback< std::vector< Mac48Address >, uint32_t > cb) |
This callback is used to obtain active neighbours on a given interface. More... | |
Proactive PREQ mechanism: | |
void | SetRoot () |
void | UnsetRoot () |
Public Member Functions inherited from ns3::MeshL2RoutingProtocol | |
virtual | ~MeshL2RoutingProtocol () |
virtual D-tor for subclasses More... | |
Ptr< MeshPointDevice > | GetMeshPoint () const |
Each mesh protocol must be installed on the mesh point to work. More... | |
void | SetMeshPoint (Ptr< MeshPointDevice > mp) |
Set host mesh point, analog of SetNode (...) methods for upper layer protocols. More... | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
virtual | ~Object () |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose (void) |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator (void) const |
Get an iterator to the Objects aggregated to this one. More... | |
virtual TypeId | GetInstanceTypeId (void) const |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (void) const |
Get a pointer to the requested aggregated Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
void | Initialize (void) |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized (void) const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount (void) const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. More... | |
void | Ref (void) const |
Increment the reference count. More... | |
void | Unref (void) const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising erros. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::MeshL2RoutingProtocol | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId (void) |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Private Types | |
typedef std::map< uint32_t, Ptr< HwmpProtocolMac > > | HwmpProtocolMacMap |
HwmpProtocolMacMap typedef. More... | |
typedef TracedCallback< struct RouteChange > | RouteChangeTracedCallback |
RouteChangeTracedCallback typedef. More... | |
Private Member Functions | |
HwmpProtocol (const HwmpProtocol &) | |
type conversion More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
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. More... | |
Mac48Address | GetAddress () |
HwmpProtocol & | operator= (const HwmpProtocol &hwmp) |
assignment operator More... | |
Interaction with HWMP MAC plugin | |
void | ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric) |
Handler for receiving Path Request. More... | |
void | ReceivePrep (IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric) |
Handler for receiving Path Reply. More... | |
void | ReceivePerr (std::vector< FailedDestination > destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp) |
Handler for receiving Path Error. More... | |
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. More... | |
PathError | MakePathError (std::vector< FailedDestination > destinations) |
forms a path error information element when list of destination fails on a given interface More... | |
void | ForwardPathError (PathError perr) |
Forwards a received path error. More... | |
void | InitiatePathError (PathError perr) |
Passes a self-generated PERR to interface-plugin. More... | |
std::vector< std::pair< uint32_t, Mac48Address > > | GetPerrReceivers (std::vector< FailedDestination > failedDest) |
Get PERR receivers. More... | |
std::vector< Mac48Address > | GetPreqReceivers (uint32_t interface) |
Get PREQ receivers. More... | |
std::vector< Mac48Address > | GetBroadcastReceivers (uint32_t interface) |
Get broadcast receivers. More... | |
bool | DropDataFrame (uint32_t seqno, Mac48Address source) |
MAC-plugin asks whether the frame can be dropped. More... | |
Methods related to Queue/Dequeue procedures | |
bool | QueuePacket (QueuedPacket packet) |
QueuedPacket | DequeueFirstPacketByDst (Mac48Address dst) |
QueuedPacket | DequeueFirstPacket () |
void | ReactivePathResolved (Mac48Address dst) |
void | ProactivePathResolved () |
Methods responsible for path discovery retry procedure: | |
bool | ShouldSendPreq (Mac48Address dst) |
checks when the last path discovery procedure was started for a given destination. More... | |
void | RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry) |
Generates PREQ retry when retry timeout has expired and route is still unresolved. More... | |
void | SendProactivePreq () |
Proactive Preq routines: More... | |
Friends | |
class | HwmpProtocolMac |
allow HwmpProtocolMac class friend access More... | |
Methods needed by HwmpMacLugin to access protocol parameters: | |
Statistics | m_stats |
statistics More... | |
HwmpProtocolMacMap | m_interfaces |
interfaces More... | |
Mac48Address | m_address |
address More... | |
uint32_t | m_dataSeqno |
data sequence no More... | |
uint32_t | m_hwmpSeqno |
HWMP sequence no. More... | |
uint32_t | m_preqId |
PREQ ID. More... | |
bool | GetDoFlag () |
Get do flag function. More... | |
bool | GetRfFlag () |
Get rf flag function. More... | |
Time | GetPreqMinInterval () |
Get PREQ minimum interval function. More... | |
Time | GetPerrMinInterval () |
Get PERR minimum interval function. More... | |
uint8_t | GetMaxTtl () |
Get maximum TTL function. More... | |
uint32_t | GetNextPreqId () |
Get next period function. More... | |
uint32_t | GetNextHwmpSeqno () |
Get next HWMP sequence no function. More... | |
uint32_t | GetActivePathLifetime () |
Get active path lifetime function. More... | |
uint8_t | GetUnicastPerrThreshold () |
Get unicast PERR threshold function. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | NotifyNewAggregate (void) |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted (void) |
Notifier called once the ObjectBase is fully constructed. More... | |
Protected Attributes inherited from ns3::MeshL2RoutingProtocol | |
Ptr< MeshPointDevice > | m_mp |
Host mesh point. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid (void) |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
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:
Size of this type is 384 bytes (on a 64-bit architecture).
Definition at line 62 of file hwmp-protocol.h.
typedef struct FailedDestination ns3::dot11s::HwmpProtocol::FailedDestination |
Definition at line 82 of file hwmp-protocol.h.
|
private |
HwmpProtocolMacMap typedef.
Definition at line 195 of file hwmp-protocol.h.
|
private |
RouteChangeTracedCallback typedef.
Definition at line 314 of file hwmp-protocol.h.
ns3::dot11s::HwmpProtocol::HwmpProtocol | ( | ) |
Definition at line 179 of file hwmp-protocol.cc.
References m_coefficient, and NS_LOG_FUNCTION.
ns3::dot11s::HwmpProtocol::~HwmpProtocol | ( | ) |
Definition at line 206 of file hwmp-protocol.cc.
References NS_LOG_FUNCTION.
|
private |
type conversion
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 1279 of file hwmp-protocol.cc.
References m_coefficient, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
private |
Definition at line 1001 of file hwmp-protocol.cc.
References m_rqueue, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::QueuedPacket::pkt.
Referenced by ProactivePathResolved().
|
private |
Definition at line 983 of file hwmp-protocol.cc.
References m_rqueue, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::QueuedPacket::pkt.
Referenced by ReactivePathResolved(), and RetryPathDiscovery().
|
virtual |
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 224 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.
|
privatevirtual |
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 212 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 815 of file hwmp-protocol.cc.
References GetAddress(), m_lastDataSeqno, and NS_LOG_FUNCTION.
|
private |
Forwards a received path error.
perr | the path error |
Definition at line 880 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpProtocol::PathError::destinations, m_interfaces, NS_LOG_FUNCTION, and ns3::dot11s::HwmpProtocol::PathError::receivers.
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 335 of file hwmp-protocol.cc.
References ns3::Packet::AddPacketTag(), ns3::dot11s::HwmpProtocol::QueuedPacket::dst, GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), GetNextHwmpSeqno(), ns3::Packet::GetSize(), 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 1199 of file hwmp-protocol.cc.
References ns3::Time::GetMicroSeconds(), and m_dot11MeshHWMPactivePathTimeout.
|
private |
Definition at line 1209 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 954 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 1162 of file hwmp-protocol.cc.
References m_doFlag.
|
private |
Get maximum TTL function.
Definition at line 1182 of file hwmp-protocol.cc.
References m_maxTtl.
|
private |
Get next HWMP sequence no function.
Definition at line 1193 of file hwmp-protocol.cc.
References m_hwmpSeqno.
Referenced by ForwardUnicast(), ReceivePreq(), RetryPathDiscovery(), and SendProactivePreq().
|
private |
Get next period function.
Definition at line 1187 of file hwmp-protocol.cc.
References m_preqId.
Referenced by SendProactivePreq().
|
private |
Get PERR minimum interval function.
Definition at line 1177 of file hwmp-protocol.cc.
References m_dot11MeshHWMPperrMinInterval.
|
private |
Get PERR receivers.
failedDest |
Definition at line 898 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 1172 of file hwmp-protocol.cc.
References m_dot11MeshHWMPpreqMinInterval.
|
private |
Get PREQ receivers.
interface |
Definition at line 938 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 1167 of file hwmp-protocol.cc.
References m_rfFlag.
Ptr< HwmpRtable > ns3::dot11s::HwmpProtocol::GetRoutingTable | ( | void | ) | const |
Get pointer to HWMP routing table.
Definition at line 1287 of file hwmp-protocol.cc.
References m_rtable.
|
static |
Get the type ID.
Definition at line 47 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 1204 of file hwmp-protocol.cc.
References m_unicastPerrThreshold.
|
private |
Passes a self-generated PERR to interface-plugin.
perr | the path error |
Definition at line 863 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.
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 765 of file hwmp-protocol.cc.
References ns3::dot11s::AirtimeLinkMetricCalculator::CalculateMetric(), ns3::Mac48Address::ConvertFrom(), first::interfaces, m_address, m_interfaces, ns3::MeshL2RoutingProtocol::m_mp, third::mac, 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 838 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().
|
private |
assignment operator
hwmp | the HWMP protocol to assign |
void ns3::dot11s::HwmpProtocol::PeerLinkStatus | ( | Mac48Address | meshPontAddress, |
Mac48Address | peerAddress, | ||
uint32_t | interface, | ||
bool | status | ||
) |
Peer link status function.
meshPontAddress | 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 798 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 |
Definition at line 1043 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 |
Definition at line 971 of file hwmp-protocol.cc.
References m_maxQueueSize, m_rqueue, and NS_LOG_FUNCTION.
Referenced by ForwardUnicast().
|
private |
Definition at line 1015 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 714 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 614 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::AddPrecursor(), ns3::dot11s::HwmpRtable::AddReactivePath(), ns3::dot11s::RouteChange::destination, GetAddress(), ns3::Mac48Address::GetBroadcast(), ns3::dot11s::IePrep::GetDestinationAddress(), ns3::dot11s::IePrep::GetDestinationSeqNumber(), ns3::dot11s::IePrep::GetLifetime(), ns3::dot11s::IePrep::GetMetric(), ns3::dot11s::IePrep::GetOriginatorAddress(), ns3::dot11s::IePrep::IncrementMetric(), ns3::dot11s::RouteChange::interface, ns3::dot11s::RouteChange::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::RouteChange::seqnum, and ns3::dot11s::RouteChange::type.
|
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 420 of file hwmp-protocol.cc.
References ns3::dot11s::HwmpRtable::AddPrecursor(), ns3::dot11s::HwmpRtable::AddProactivePath(), ns3::dot11s::HwmpRtable::AddReactivePath(), 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::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::HwmpRtable::LookupResult::lifetime, ns3::dot11s::RouteChange::lifetime, ns3::dot11s::HwmpRtable::LookupProactive(), ns3::dot11s::HwmpRtable::LookupReactive(), m_hwmpSeqnoMetricDatabase, m_interfaces, m_routeChangeTraceSource, m_rtable, ns3::dot11s::HwmpRtable::LookupResult::metric, ns3::dot11s::RouteChange::metric, ns3::MicroSeconds(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ProactivePathResolved(), ReactivePathResolved(), ns3::dot11s::HwmpRtable::LookupResult::retransmitter, ns3::dot11s::RouteChange::retransmitter, SendPrep(), ns3::dot11s::HwmpRtable::LookupResult::seqnum, ns3::dot11s::RouteChange::seqnum, and ns3::dot11s::RouteChange::type.
|
virtual |
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 324 of file hwmp-protocol.cc.
References NS_FATAL_ERROR, and ns3::Packet::RemovePacketTag().
void ns3::dot11s::HwmpProtocol::Report | ( | std::ostream & | os | ) | const |
Definition at line 1240 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().
|
virtual |
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 242 of file hwmp-protocol.cc.
References ns3::Packet::AddPacketTag(), first::address, ns3::Packet::Copy(), ns3::dot11s::HwmpTag::DecrementTtl(), ns3::dot11s::HwmpProtocol::Statistics::droppedTtl, ForwardUnicast(), ns3::Mac48Address::GetBroadcast(), GetBroadcastReceivers(), ns3::MeshL2RoutingProtocol::GetMeshPoint(), ns3::Packet::GetSize(), ns3::dot11s::HwmpTag::GetTtl(), m_dataSeqno, m_interfaces, m_maxTtl, m_stats, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::Packet::PeekPacketTag(), ns3::Packet::RemovePacketTag(), 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 1268 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 1084 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, ns3::Simulator::Schedule(), ns3::dot11s::HwmpRtable::LookupResult::seqnum, ns3::dot11s::HwmpProtocol::QueuedPacket::src, and ns3::dot11s::HwmpProtocol::Statistics::totalDropped.
Referenced by 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 740 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 1141 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(), 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().
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 810 of file hwmp-protocol.cc.
References m_neighboursCallback.
void ns3::dot11s::HwmpProtocol::SetRoot | ( | ) |
Definition at line 1128 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 1069 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 | ( | ) |
Definition at line 1135 of file hwmp-protocol.cc.
References ns3::EventId::Cancel(), m_proactivePreqTimer, and NS_LOG_FUNCTION.
|
friend |
allow HwmpProtocolMac class friend access
Definition at line 158 of file hwmp-protocol.h.
|
private |
address
Definition at line 420 of file hwmp-protocol.h.
Referenced by GetAddress(), Install(), Report(), and SetRoot().
|
private |
Random variable for random start time.
coefficient
Definition at line 470 of file hwmp-protocol.h.
Referenced by AssignStreams(), DoInitialize(), and HwmpProtocol().
|
private |
|
private |
Definition at line 465 of file hwmp-protocol.h.
Referenced by GetDoFlag(), GetTypeId(), and Report().
|
private |
Definition at line 457 of file hwmp-protocol.h.
Referenced by GetActivePathLifetime(), GetTypeId(), and Report().
|
private |
Definition at line 456 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and SendProactivePreq().
|
private |
Definition at line 452 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and RetryPathDiscovery().
|
private |
Definition at line 453 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), RetryPathDiscovery(), and ShouldSendPreq().
|
private |
Definition at line 458 of file hwmp-protocol.h.
Referenced by GetTypeId(), Report(), and SendProactivePreq().
|
private |
Definition at line 455 of file hwmp-protocol.h.
Referenced by GetPerrMinInterval(), GetTypeId(), and Report().
|
private |
Definition at line 454 of file hwmp-protocol.h.
Referenced by GetPreqMinInterval(), GetTypeId(), and Report().
|
private |
Definition at line 459 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 429 of file hwmp-protocol.h.
Referenced by DoDispose(), ReceivePrep(), and ReceivePreq().
|
private |
interfaces
Definition at line 419 of file hwmp-protocol.h.
Referenced by DoDispose(), ForwardPathError(), ForwardUnicast(), InitiatePathError(), Install(), ReceivePrep(), ReceivePreq(), Report(), RequestRoute(), ResetStats(), RetryPathDiscovery(), SendPrep(), and SendProactivePreq().
|
private |
Definition at line 460 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 427 of file hwmp-protocol.h.
Referenced by DoDispose(), and DropDataFrame().
|
private |
Definition at line 451 of file hwmp-protocol.h.
Referenced by GetTypeId(), QueuePacket(), and Report().
|
private |
Definition at line 461 of file hwmp-protocol.h.
Referenced by GetMaxTtl(), GetTypeId(), Report(), RequestRoute(), SendPrep(), and SendProactivePreq().
|
private |
neighbors callback
Definition at line 471 of file hwmp-protocol.h.
Referenced by GetBroadcastReceivers(), GetPreqReceivers(), and SetNeighboursCallback().
|
private |
|
private |
PREQ timeouts.
Definition at line 441 of file hwmp-protocol.h.
Referenced by DoDispose(), ReactivePathResolved(), RetryPathDiscovery(), and ShouldSendPreq().
|
private |
proactive PREQ timer
Definition at line 442 of file hwmp-protocol.h.
Referenced by DoDispose(), DoInitialize(), SendProactivePreq(), and UnsetRoot().
|
private |
Random start in Proactive PREQ propagation.
Definition at line 444 of file hwmp-protocol.h.
Referenced by DoInitialize(), and GetTypeId().
|
private |
Definition at line 466 of file hwmp-protocol.h.
Referenced by GetRfFlag(), GetTypeId(), and Report().
|
private |
Route change trace source.
Definition at line 316 of file hwmp-protocol.h.
Referenced by GetPerrReceivers(), GetTypeId(), MakePathError(), ReceivePrep(), and ReceivePreq().
|
private |
Route discovery time:
Definition at line 312 of file hwmp-protocol.h.
Referenced by GetTypeId(), ReactivePathResolved(), and RetryPathDiscovery().
|
private |
Definition at line 446 of file hwmp-protocol.h.
Referenced by DequeueFirstPacket(), DequeueFirstPacketByDst(), DoDispose(), and QueuePacket().
|
private |
Routing table.
Definition at line 433 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 417 of file hwmp-protocol.h.
Referenced by ForwardUnicast(), MakePathError(), ProactivePathResolved(), ReactivePathResolved(), Report(), RequestRoute(), ResetStats(), RetryPathDiscovery(), and SendPrep().
|
private |
Definition at line 464 of file hwmp-protocol.h.
Referenced by GetBroadcastReceivers(), GetTypeId(), and Report().
|
private |
Definition at line 462 of file hwmp-protocol.h.
Referenced by GetTypeId(), GetUnicastPerrThreshold(), and Report().
|
private |
Definition at line 463 of file hwmp-protocol.h.
Referenced by GetPreqReceivers(), GetTypeId(), and Report().