A Discrete-Event Network Simulator
API
peer-management-protocol.h
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
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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  * Aleksey Kovalenko <kovalenko@iitp.ru>
20  */
21 
22 #ifndef DOT11S_PEER_MAN_H
23 #define DOT11S_PEER_MAN_H
24 
25 #include "ns3/mac48-address.h"
26 #include "ns3/net-device.h"
27 #include "ns3/event-id.h"
28 #include "ns3/nstime.h"
29 #include "ns3/traced-value.h"
32 #include "peer-link.h"
33 
34 #include <map>
35 namespace ns3 {
36 class MeshPointDevice;
37 class UniformRandomVariable;
38 namespace dot11s {
39 class PeerManagementProtocolMac;
40 class PeerLink;
41 class IeMeshId;
42 class IePeerManagement;
43 class IeConfiguration;
50 {
51 public:
58  static TypeId GetTypeId ();
59  void DoDispose ();
70  bool Install (Ptr<MeshPointDevice> mp);
77 
83  Ptr<IeBeaconTiming> GetBeaconTimingElement (uint32_t interface);
91  void ReceiveBeacon (uint32_t interface, Mac48Address peerAddress, Time beaconInterval, Ptr<IeBeaconTiming> beaconTiming);
93 
98 
107  void ReceivePeerLinkFrame (
108  uint32_t interface,
109  Mac48Address peerAddress,
110  Mac48Address peerMeshPointAddress,
111  uint16_t aid,
112  IePeerManagement peerManagementElement,
113  IeConfiguration meshConfig
114  );
121  void ConfigurationMismatch (uint32_t interface, Mac48Address peerAddress);
127  void TransmissionFailure (uint32_t interface, const Mac48Address peerAddress);
133  void TransmissionSuccess (uint32_t interface, const Mac48Address peerAddress);
140  bool IsActiveLink (uint32_t interface, Mac48Address peerAddress);
142 
145 
156  Ptr<PeerLink> FindPeerLink (uint32_t interface, Mac48Address peerAddress);
161  std::vector < Ptr<PeerLink> > GetPeerLinks () const;
167  std::vector<Mac48Address> GetPeers (uint32_t interface) const;
178  uint8_t GetNumberOfLinks ();
183  void SetMeshId (std::string s);
188  Ptr<IeMeshId> GetMeshId () const;
193  void SetBeaconCollisionAvoidance (bool enable);
198  bool GetBeaconCollisionAvoidance () const;
204  void NotifyBeaconSent (uint32_t interface, Time beaconInterval);
206 
211  void Report (std::ostream & os) const;
213  void ResetStats ();
222  int64_t AssignStreams (int64_t stream);
223 
231  (Mac48Address src, const Mac48Address dst);
232 
233 
234 private:
235  virtual void DoInitialize ();
236 
237  // Private structures
239  struct BeaconInfo
240  {
241  uint16_t aid;
244  };
247  typedef std::vector<Ptr<PeerLink> > PeerLinksOnInterface;
249  typedef std::map<uint32_t, PeerLinksOnInterface> PeerLinksMap;
251  typedef std::map<Mac48Address, BeaconInfo> BeaconsOnInterface;
253  typedef std::map<uint32_t, BeaconsOnInterface> BeaconInfoMap;
255  typedef std::map<uint32_t, Ptr<PeerManagementProtocolMac> > PeerManagementProtocolMacMap;
256 
257 private:
267 
277  uint32_t interface,
278  Mac48Address peerAddress,
279  Mac48Address peerMeshPointAddress
280  );
287  bool ShouldSendOpen (uint32_t interface, Mac48Address peerAddress);
295  bool ShouldAcceptOpen (uint32_t interface, Mac48Address peerAddress, PmpReasonCode & reasonCode);
304  void PeerLinkStatus (uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddres, PeerLink::PeerState ostate, PeerLink::PeerState nstate);
309  void CheckBeaconCollisions (uint32_t interface);
314  void ShiftOwnBeacon (uint32_t interface);
320  Time TuToTime (int x);
326  int TimeToTu (Time x);
327 
335  void NotifyLinkOpen (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface);
343  void NotifyLinkClose (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface);
344 private:
348 
349  uint16_t m_lastAssocId;
350  uint16_t m_lastLocalLinkId;
357  std::map<uint32_t, Time> m_lastBeacon;
359  std::map<uint32_t, Time> m_beaconInterval;
360 
373 
380 
382  struct Statistics {
383  uint16_t linksTotal;
384  uint16_t linksOpened;
385  uint16_t linksClosed;
386 
392  Statistics (uint16_t t = 0);
397  void Print (std::ostream & os) const;
398  };
399  struct Statistics m_stats;
400 
403 };
404 
405 } // namespace dot11s
406 } // namespace ns3
407 #endif
Callback template class.
Definition: callback.h:1279
an EUI-48 address
Definition: mac48-address.h:44
A base class which provides memory management and object aggregation.
Definition: object.h:88
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
a unique identifier for an interface.
Definition: type-id.h:59
Describes Mesh Configuration Element see 7.3.2.86 of 802.11s draft 3.0.
according to IEEE 802.11 - 2012
802.11s Peer Management Protocol model
void ReceivePeerLinkFrame(uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddress, uint16_t aid, IePeerManagement peerManagementElement, IeConfiguration meshConfig)
Deliver Peer link management information to the protocol-part.
bool GetBeaconCollisionAvoidance() const
Get beacon collision avoidance.
std::map< Mac48Address, BeaconInfo > BeaconsOnInterface
This map keeps relationship between peer address and its beacon information.
Callback< void, Mac48Address, Mac48Address, uint32_t, bool > m_peerStatusCallback
Callback to notify about peer link changes: Mac48Address is peer address of mesh point,...
void SetMeshId(std::string s)
Set mesh ID to a string value.
uint8_t m_maxNumberOfPeerLinks
maimum number of peer links
int TimeToTu(Time x)
Time<-->TU converters:
void Report(std::ostream &os) const
Report statistics.
void TransmissionFailure(uint32_t interface, const Mac48Address peerAddress)
Cancels peer link due to successive transmission failures.
uint16_t m_maxBeaconShift
Beacon can be shifted at [-m_maxBeaconShift; +m_maxBeaconShift] TUs.
void(* LinkOpenCloseTracedCallback)(Mac48Address src, const Mac48Address dst)
TracedCallback signature for link open/close events.
std::map< uint32_t, Ptr< PeerManagementProtocolMac > > PeerManagementProtocolMacMap
this vector keeps pointers to MAC-plugins
LinkEventCallback m_linkOpenTraceSrc
LinkOpen trace source.
void TransmissionSuccess(uint32_t interface, const Mac48Address peerAddress)
resets transmission failure statistics
bool ShouldAcceptOpen(uint32_t interface, Mac48Address peerAddress, PmpReasonCode &reasonCode)
External peer-chooser.
PeerManagementProtocol(const PeerManagementProtocol &)
type conversion operator
std::vector< Ptr< PeerLink > > GetPeerLinks() const
Get list of all active peer links.
void ReceiveBeacon(uint32_t interface, Mac48Address peerAddress, Time beaconInterval, Ptr< IeBeaconTiming > beaconTiming)
To initiate peer link we must notify about received beacon.
void NotifyLinkClose(Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
Aux.
PeerManagementProtocol & operator=(const PeerManagementProtocol &peer)
assignment operator
std::map< uint32_t, BeaconsOnInterface > BeaconInfoMap
This map keeps beacon information on all interfaces.
Ptr< PeerLink > InitiateLink(uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddress)
Initiate link function.
Ptr< IeMeshId > GetMeshId() const
Get mesh ID information element.
std::map< uint32_t, PeerLinksOnInterface > PeerLinksMap
This map keeps all peer links.
void SetPeerLinkStatusCallback(Callback< void, Mac48Address, Mac48Address, uint32_t, bool > cb)
Set peer link status change callback.
static TypeId GetTypeId()
Get the type ID.
void DoDispose()
Destructor implementation.
std::map< uint32_t, Time > m_lastBeacon
Last beacon at each interface.
bool Install(Ptr< MeshPointDevice > mp)
Install PMP on given mesh point.
PeerManagementProtocolMacMap m_plugins
plugins
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
std::map< uint32_t, Time > m_beaconInterval
Beacon interval at each interface.
void NotifyBeaconSent(uint32_t interface, Time beaconInterval)
Notify about beacon send event, needed to schedule BCA.
void ShiftOwnBeacon(uint32_t interface)
Shift own beacon function.
std::vector< Ptr< PeerLink > > PeerLinksOnInterface
We keep a vector of pointers to PeerLink class.
void ConfigurationMismatch(uint32_t interface, Mac48Address peerAddress)
Cancels peer link due to broken configuration (Mesh ID or Supported rates)
uint8_t GetNumberOfLinks()
Get number of links.
PeerLinksMap m_peerLinks
Simple link open/close trace source type. Addresses are: src interface, dst interface.
Ptr< UniformRandomVariable > m_beaconShift
Add randomness to beacon shift.
virtual void DoInitialize()
Initialize() implementation.
bool IsActiveLink(uint32_t interface, Mac48Address peerAddress)
Checks if there is established link.
std::vector< Mac48Address > GetPeers(uint32_t interface) const
Get list of active peers of my given interface.
LinkEventCallback m_linkCloseTraceSrc
LinkClose trace source.
TracedCallback< Mac48Address, Mac48Address > LinkEventCallback
Simple link open/close trace source type. Addresses are: src interface, dst interface.
void CheckBeaconCollisions(uint32_t interface)
BCA.
Ptr< IeBeaconTiming > GetBeaconTimingElement(uint32_t interface)
When we are sending a beacon - we fill beacon timing element.
Mac48Address GetAddress()
Get mesh point address.
Ptr< PeerLink > FindPeerLink(uint32_t interface, Mac48Address peerAddress)
Find active peer link by my interface and peer interface MAC.
Time TuToTime(int x)
Time<-->TU converters:
uint16_t m_lastLocalLinkId
last local link ID
void NotifyLinkOpen(Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
Aux.
void ResetStats()
Reset statistics function.
void SetBeaconCollisionAvoidance(bool enable)
Enable or disable beacon collision avoidance.
bool ShouldSendOpen(uint32_t interface, Mac48Address peerAddress)
External peer-chooser.
void PeerLinkStatus(uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddres, PeerLink::PeerState ostate, PeerLink::PeerState nstate)
Indicates changes in peer links.
PmpReasonCode
Codes used by 802.11s Peer Management Protocol.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Keeps information about beacon of peer station: beacon interval, association ID, last time we have re...
Time referenceTbtt
When one of my station's beacons was put into a beacon queue;.
Time beaconInterval
Beacon interval of my station;.
void Print(std::ostream &os) const
Print function.