A Discrete-Event Network Simulator
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008,2009 IITP RAS
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Kirill Andreev <andreev@iitp.ru>
19  */
21 #ifndef HWMP_PROTOCOL_H
22 #define HWMP_PROTOCOL_H
24 #include "ns3/mesh-l2-routing-protocol.h"
25 #include "ns3/nstime.h"
26 #include "ns3/event-id.h"
27 #include "ns3/traced-value.h"
28 #include <vector>
29 #include <map>
31 namespace ns3 {
32 class MeshPointDevice;
33 class Packet;
34 class Mac48Address;
35 class UniformRandomVariable;
36 namespace dot11s {
37 class HwmpProtocolMac;
38 class HwmpRtable;
39 class IePerr;
40 class IePreq;
41 class IePrep;
47 {
48  std::string type;
51  uint32_t interface;
52  uint32_t metric;
54  uint32_t seqnum;
55 };
63 {
64 public:
69  static TypeId GetTypeId ();
70  HwmpProtocol ();
71  ~HwmpProtocol ();
72  void DoDispose ();
77  {
79  uint32_t seqnum;
80  };
94  bool RequestRoute (uint32_t sourceIface, const Mac48Address source, const Mac48Address destination,
95  Ptr<const Packet> packet, uint16_t protocolType, RouteReplyCallback routeReply);
106  bool RemoveRoutingStuff (uint32_t fromIface, const Mac48Address source,
107  const Mac48Address destination, Ptr<Packet> packet, uint16_t& protocolType);
125  void PeerLinkStatus (Mac48Address meshPontAddress, Mac48Address peerAddress, uint32_t interface,bool status);
130  void SetNeighboursCallback (Callback<std::vector<Mac48Address>, uint32_t> cb);
133  void SetRoot ();
134  void UnsetRoot ();
137  void Report (std::ostream &) const;
139  void ResetStats ();
148  int64_t AssignStreams (int64_t stream);
154  Ptr<HwmpRtable> GetRoutingTable (void) const;
156 private:
158  friend class HwmpProtocolMac;
160  virtual void DoInitialize ();
167  HwmpProtocol& operator= (const HwmpProtocol & hwmp);
172  HwmpProtocol (const HwmpProtocol &);
178  struct PathError
179  {
180  std::vector<FailedDestination> destinations;
181  std::vector<std::pair<uint32_t, Mac48Address> > receivers;
182  };
185  {
189  uint16_t protocol;
190  uint32_t inInterface;
193  QueuedPacket ();
194  };
195  typedef std::map<uint32_t, Ptr<HwmpProtocolMac> > HwmpProtocolMacMap;
208  bool ForwardUnicast (uint32_t sourceIface, const Mac48Address source, const Mac48Address destination,
209  Ptr<Packet> packet, uint16_t protocolType, RouteReplyCallback routeReply, uint32_t ttl);
212  //\{
222  void ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric);
232  void ReceivePrep (IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric);
241  void ReceivePerr (std::vector<FailedDestination> destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp);
253  void SendPrep (
254  Mac48Address src,
255  Mac48Address dst,
256  Mac48Address retransmitter,
257  uint32_t initMetric,
258  uint32_t originatorDsn,
259  uint32_t destinationSN,
260  uint32_t lifetime,
261  uint32_t interface);
269  PathError MakePathError (std::vector<FailedDestination> destinations);
274  void ForwardPathError (PathError perr);
279  void InitiatePathError (PathError perr);
286  std::vector<std::pair<uint32_t, Mac48Address> > GetPerrReceivers (std::vector<FailedDestination> failedDest);
294  std::vector<Mac48Address> GetPreqReceivers (uint32_t interface);
301  std::vector<Mac48Address> GetBroadcastReceivers (uint32_t interface);
309  bool DropDataFrame (uint32_t seqno, Mac48Address source);
310  //\}
319  bool QueuePacket (QueuedPacket packet);
323  void ProactivePathResolved ();
334  bool ShouldSendPreq (Mac48Address dst);
343  void RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry);
345  void SendProactivePreq ();
354  bool GetDoFlag ();
359  bool GetRfFlag ();
374  uint8_t GetMaxTtl ();
379  uint32_t GetNextPreqId ();
384  uint32_t GetNextHwmpSeqno ();
389  uint32_t GetActivePathLifetime ();
394  uint8_t GetUnicastPerrThreshold ();
395 private:
397  struct Statistics
398  {
399  uint16_t txUnicast;
400  uint16_t txBroadcast;
401  uint32_t txBytes;
402  uint16_t droppedTtl;
403  uint16_t totalQueued;
404  uint16_t totalDropped;
405  uint16_t initiatedPreq;
406  uint16_t initiatedPrep;
407  uint16_t initiatedPerr;
413  void Print (std::ostream & os) const;
415  Statistics ();
416  };
421  uint32_t m_dataSeqno;
422  uint32_t m_hwmpSeqno;
423  uint32_t m_preqId;
424  std::map<Mac48Address, uint32_t> m_lastDataSeqno;
429  std::map<Mac48Address, std::pair<uint32_t, uint32_t> > m_hwmpSeqnoMetricDatabase;
436  struct PreqEvent {
439  };
441  std::map<Mac48Address, PreqEvent> m_preqTimeouts;
446  std::vector<QueuedPacket> m_rqueue;
451  uint16_t m_maxQueueSize;
460  bool m_isRoot;
461  uint8_t m_maxTtl;
465  bool m_doFlag;
466  bool m_rfFlag;
472 };
473 } // namespace dot11s
474 } // namespace ns3
475 #endif
Structure of path error: IePerr and list of receivers: interfaces and MAC address.
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.
Definition: nstime.h:102
Mac48Address retransmitter
route source
Definition: hwmp-protocol.h:50
std::string type
type of change
Definition: hwmp-protocol.h:48
Callback template class.
Definition: callback.h:1273
std::map< uint32_t, Ptr< HwmpProtocolMac > > HwmpProtocolMacMap
HwmpProtocolMacMap typedef.
uint16_t initiatedPreq
initiated PREQ
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.
structure of unreachable destination - address and sequence number
Definition: hwmp-protocol.h:76
Forward calls to a chain of Callback.
TracedCallback< struct RouteChange > RouteChangeTracedCallback
RouteChangeTracedCallback typedef.
void ForwardPathError(PathError perr)
Forwards a received path error.
See of 802.11s draft 2.07.
bool GetRfFlag()
Get rf flag function.
bool Install(Ptr< MeshPointDevice >)
Install HWMP on given mesh point.
void InitiatePathError(PathError perr)
Passes a self-generated PERR to interface-plugin.
Time lifetime
lifetime of route
Definition: hwmp-protocol.h:53
Statistics m_stats
Ptr< HwmpRtable > GetRoutingTable(void) const
Get pointer to HWMP routing table.
uint8_t GetMaxTtl()
Get maximum TTL function.
void ReactivePathResolved(Mac48Address dst)
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 ...
TracedCallback< Time > m_routeDiscoveryTimeCallback
Route discovery time:
void ReceivePrep(IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric)
Handler for receiving Path Reply.
void SendProactivePreq()
Proactive Preq routines:
bool DropDataFrame(uint32_t seqno, Mac48Address source)
MAC-plugin asks whether the frame can be dropped.
QueuedPacket DequeueFirstPacket()
std::vector< Mac48Address > GetPreqReceivers(uint32_t interface)
Get PREQ receivers.
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.
Time GetPerrMinInterval()
Get PERR minimum interval function.
std::vector< QueuedPacket > m_rqueue
Packet Queue.
std::vector< std::pair< uint32_t, Mac48Address > > GetPerrReceivers(std::vector< FailedDestination > failedDest)
Get PERR receivers.
void RetryPathDiscovery(Mac48Address dst, uint8_t numOfRetry)
Generates PREQ retry when retry timeout has expired and route is still unresolved.
void DoDispose()
Destructor implementation.
Mac48Address destination
route destination
Definition: hwmp-protocol.h:49
Hybrid wireless mesh protocol – a mesh routing protocol defined in IEEE 802.11-2012 standard...
Definition: hwmp-protocol.h:62
See of 802.11s draft 2.07.
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
Definition: hwmp-protocol.h:54
Packet waiting its routing information.
HwmpProtocolMacMap m_interfaces
uint32_t GetActivePathLifetime()
Get active path lifetime function.
uint16_t totalDropped
total dropped
Ptr< HwmpRtable > m_rtable
Routing table.
static TypeId GetTypeId()
Get the type ID.
void Report(std::ostream &) const
uint16_t initiatedPerr
initiated PERR
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.
Interface MAC plugin for HWMP – 802.11s routing protocol.
uint32_t m_hwmpSeqno
HWMP sequence no.
Mac48Address m_address
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint16_t initiatedPrep
initiated PREP
uint32_t GetNextPreqId()
Get next period function.
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)
an EUI-48 address
Definition: mac48-address.h:43
uint32_t GetNextHwmpSeqno()
Get next HWMP sequence no function.
RouteReplyCallback reply
how to reply
uint32_t m_preqId
Interface for L2 mesh routing protocol and mesh point communication.
Mac48Address destination
destination address
Definition: hwmp-protocol.h:78
void ReceivePerr(std::vector< FailedDestination > destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp)
Handler for receiving Path Error.
uint32_t metric
metric of route
Definition: hwmp-protocol.h:52
Ptr< UniformRandomVariable > m_coefficient
Random variable for random start time.
uint8_t GetUnicastPerrThreshold()
Get unicast PERR threshold function.
EventId m_proactivePreqTimer
proactive PREQ timer
An identifier for simulation events.
Definition: event-id.h:53
std::vector< Mac48Address > GetBroadcastReceivers(uint32_t interface)
Get broadcast receivers.
std::vector< FailedDestination > destinations
destination list: Mac48Address and sequence number
void Print(std::ostream &os) const
Print function.
uint16_t txUnicast
transmit unicast
Callback< std::vector< Mac48Address >, uint32_t > m_neighboursCallback
neighbors callback
std::map< Mac48Address, uint32_t > m_lastDataSeqno
keeps HWMP seqno (first in pair) and HWMP metric (second in pair) for each address ...
QueuedPacket DequeueFirstPacketByDst(Mac48Address dst)
Time GetPreqMinInterval()
Get PREQ minimum interval function.
TracedCallback< struct RouteChange > m_routeChangeTraceSource
Route change trace source.
uint32_t inInterface
incoming device interface ID. (if packet has come from upper layers, this is Mesh point ID) ...
bool QueuePacket(QueuedPacket packet)
bool ShouldSendPreq(Mac48Address dst)
checks when the last path discovery procedure was started for a given destination.
HwmpProtocol & operator=(const HwmpProtocol &hwmp)
assignment operator
void PeerLinkStatus(Mac48Address meshPontAddress, Mac48Address peerAddress, uint32_t interface, bool status)
Peer link status function.
void ResetStats()
Reset Statistics:
a unique identifier for an interface.
Definition: type-id.h:58
uint32_t interface
interface index
Definition: hwmp-protocol.h:51
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...
Structure to encapsulate route change information.
Definition: hwmp-protocol.h:46
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.