22 #ifndef DOT11S_PEER_MAN_H
23 #define DOT11S_PEER_MAN_H
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"
30 #include "ie-dot11s-beacon-timing.h"
31 #include "ie-dot11s-peer-management.h"
32 #include "peer-link.h"
36 class MeshPointDevice;
37 class UniformRandomVariable;
39 class PeerManagementProtocolMac;
42 class IePeerManagement;
43 class IeConfiguration;
54 static TypeId GetTypeId ();
139 std::vector<Mac48Address>
GetPeers (uint32_t interface)
const;
142 uint8_t GetNumberOfLinks ();
143 void SetMeshId (std::string s);
147 bool GetBeaconCollisionAvoidance ()
const;
151 void Report (std::ostream &)
const;
201 bool ShouldSendOpen (uint32_t interface,
Mac48Address peerAddress);
210 void ShiftOwnBeacon (uint32_t interface);
215 Time TuToTime (
int x);
216 int TimeToTu (
Time x);
228 uint16_t m_lastAssocId;
229 uint16_t m_lastLocalLinkId;
230 uint8_t m_maxNumberOfPeerLinks;
268 uint16_t linksOpened;
269 uint16_t linksClosed;
272 void Print (std::ostream & os)
const;
void NotifyLinkClose(Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
Aux. method to register closed links.
virtual void DoInitialize()
smart pointer class similar to boost::intrusive_ptr
void NotifyLinkOpen(Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
Aux. method to register open links.
Ptr< UniformRandomVariable > m_beaconShift
Add randomness to beacon shift.
void Report(std::ostream &) const
: Report statistics
Ptr< PeerLink > FindPeerLink(uint32_t interface, Mac48Address peerAddress)
Find active peer link by my interface and peer interface MAC.
LinkEventCallback m_linkCloseTraceSrc
LinkClose trace source.
TracedCallback< Mac48Address, Mac48Address > LinkEventCallback
Simple link open/close trace source type. Addresses are: src interface, dst interface.
PeerState
Peer Link state:
bool IsActiveLink(uint32_t interface, Mac48Address peerAddress)
Checks if there is established link.
std::vector< Ptr< PeerLink > > PeerLinksOnInterface
std::vector< Mac48Address > GetPeers(uint32_t interface) const
Get list of active peers of my given interface.
See 7.3.2.85 of draft 2.07.
void NotifyBeaconSent(uint32_t interface, Time beaconInterval)
Notify about beacon send event, needed to schedule BCA.
Mac48Address GetAddress()
Get mesh point address. TODO this used by plugins only. Now MAC plugins can ask MP addrress directly ...
void SetPeerLinkStatusCallback(Callback< void, Mac48Address, Mac48Address, uint32_t, bool > cb)
Set peer link status change callback.
std::vector< Ptr< PeerLink > > GetPeerLinks() const
Get list of all active peer links.
std::map< uint32_t, PeerLinksOnInterface > PeerLinksMap
This map keeps all peer links.
LinkEventCallback m_linkOpenTraceSrc
LinkOpen trace source.
void ReceivePeerLinkFrame(uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddress, uint16_t aid, IePeerManagement peerManagementElement, IeConfiguration meshConfig)
Methods that handle Peer link management frames interaction:
Ptr< IeBeaconTiming > GetBeaconTimingElement(uint32_t interface)
When we are sending a beacon - we fill beacon timing element.
void PeerLinkStatus(uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddres, PeerLink::PeerState ostate, PeerLink::PeerState nstate)
Indicates changes in peer links.
std::map< Mac48Address, BeaconInfo > BeaconsOnInterface
This map keeps relationship between peer address and its beacon information.
void ConfigurationMismatch(uint32_t interface, Mac48Address peerAddress)
Cancels peer link due to broken configuration (Mesh ID or Supported rates)
void TransmissionFailure(uint32_t interface, const Mac48Address peerAddress)
Cancels peer link due to successive transmission failures.
void CheckBeaconCollisions(uint32_t interface)
BCA.
std::map< uint32_t, Time > m_lastBeacon
Last beacon at each interface.
PmpReasonCode
Codes used by 802.11s Peer Management Protocol.
bool m_enableBca
Flag which enables BCA.
void ReceiveBeacon(uint32_t interface, Mac48Address peerAddress, Time beaconInterval, Ptr< IeBeaconTiming > beaconTiming)
To initiate peer link we must notify about received beacon.
Describes Mesh Configuration Element see 7.3.2.86 of 802.11s draft 3.0.
std::map< uint32_t, Time > m_beaconInterval
Beacon interval at each interface.
void SetBeaconCollisionAvoidance(bool enable)
Enable or disable beacon collision avoidance.
a base class which provides memory management and object aggregation
int64_t AssignStreams(int64_t stream)
std::map< uint32_t, Ptr< PeerManagementProtocolMac > > PeerManagementProtocolMacMap
this vector keeps pointers to MAC-plugins
Keeps information about beacon of peer station: beacon interval, association ID, last time we have re...
uint16_t m_maxBeaconShift
Beacon can be shifted at [-m_maxBeaconShift; +m_maxBeaconShift] TUs.
Callback< void, Mac48Address, Mac48Address, uint32_t, bool > m_peerStatusCallback
Callback to notify about peer link changes: Mac48Address is peer address of mesh point, Mac48Address is peer address of interface, uint32_t - interface ID, bool is status - true when new link has appeared, false - when link was closed,.
std::map< uint32_t, BeaconsOnInterface > BeaconInfoMap
This map keeps beacon information on all interfaces.
a unique identifier for an interface.
bool Install(Ptr< MeshPointDevice >)
Install PMP on given mesh point.
void TransmissionSuccess(uint32_t interface, const Mac48Address peerAddress)
resets transmission failure statistics
802.11s Peer Management Protocol model