A Discrete-Event Network Simulator
API
peer-management-protocol-mac.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 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  * Author: Kirill Andreev <andreev@iitp.ru>
19  */
20 
21 #ifndef PEER_MANAGEMENT_PROTOCOL_MAC_H
22 #define PEER_MANAGEMENT_PROTOCOL_MAC_H
23 
24 #include "ns3/mesh-wifi-interface-mac-plugin.h"
25 
26 namespace ns3 {
27 class MeshWifiInterfaceMac;
28 class WifiMacQueueItem;
29 enum WifiMacDropReason : uint8_t; // opaque enum declaration
30 namespace dot11s {
31 class PeerManagementProtocol;
32 class IeConfiguration;
33 class IePeerManagement;
34 class PeerManagementProtocol;
45 {
46 public:
53  PeerManagementProtocolMac (uint32_t interface, Ptr<PeerManagementProtocol> protocol);
55 
56  // Inherited from plugin abstract class
68  bool Receive (Ptr<Packet> packet, const WifiMacHeader & header);
85  void UpdateBeacon (MeshWifiBeacon & beacon) const;
91  int64_t AssignStreams (int64_t stream);
92 
95 
99  void Report (std::ostream &) const;
101  void ResetStats ();
107  uint32_t GetLinkMetric (Mac48Address peerAddress);
109 
110 private:
120 
124  friend class PeerLink;
126  // \{
132  {
133  uint8_t subtype;
134  uint16_t aid;
136  uint16_t qos;
137  };
159  // \}
171  // BCA functionality
176  void SetBeaconShift (Time shift);
191  Mac48Address peerAddress,
192  Mac48Address peerMpAddress,
193  uint16_t aid,
194  IePeerManagement peerElement,
195  IeConfiguration meshConfig
196  );
201  Mac48Address GetAddress () const;
203  struct Statistics
204  {
205  uint16_t txOpen;
206  uint16_t txConfirm;
207  uint16_t txClose;
208  uint16_t rxOpen;
209  uint16_t rxConfirm;
210  uint16_t rxClose;
211  uint16_t dropped;
212  uint16_t brokenMgt;
213  uint16_t txMgt;
214  uint32_t txMgtBytes;
215  uint16_t rxMgt;
216  uint32_t rxMgtBytes;
217  uint16_t beaconShift;
218 
220  Statistics ();
225  void Print (std::ostream & os) const;
226  };
227 
228 private:
232  uint32_t m_ifIndex;
234 };
235 
236 } // namespace dot11s
237 } // namespace ns3
238 
239 #endif /* PEER_MANAGEMENT_PROTOCOL_MAC_H */
240 
Ptr< Packet > CreatePeerLinkOpenFrame()
Create peer link open frame function.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
void TxError(WifiMacDropReason reason, Ptr< const WifiMacQueueItem > mpdu)
Closes link when a proper number of successive transmissions have failed.
void SetBeaconShift(Time shift)
Set beacon shift function.
void UpdateBeacon(MeshWifiBeacon &beacon) const
Add beacon timing and mesh ID information elements, and notify beacon sent.
void SetPeerManagerProtcol(Ptr< PeerManagementProtocol > protocol)
Set peer manager protocol function.
int64_t AssignStreams(int64_t stream)
Assign the streams.
The Supported Rates Information ElementThis class knows how to serialise and deserialise the Supporte...
according to IEEE 802.11 - 2012
PeerManagementProtocolMac(uint32_t interface, Ptr< PeerManagementProtocol > protocol)
Constructor.
bool UpdateOutcomingFrame(Ptr< Packet > packet, WifiMacHeader &header, Mac48Address from, Mac48Address to)
This method appears to test a few conditions.
uint32_t GetLinkMetric(Mac48Address peerAddress)
Get the link metric.
PeerManagementProtocolMac & operator=(const PeerManagementProtocolMac &peer)
assignment operator
Ptr< Packet > CreatePeerLinkCloseFrame()
Create peer link clode frame function.
void TxOk(Ptr< const WifiMacQueueItem > mpdu)
Transmit OK function.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Common interface for mesh point interface MAC plugins.
void SendPeerLinkManagementFrame(Mac48Address peerAddress, Mac48Address peerMpAddress, uint16_t aid, IePeerManagement peerElement, IeConfiguration meshConfig)
Send peer link management frame function.
void Print(std::ostream &os) const
Print function.
an EUI-48 address
Definition: mac48-address.h:43
Beacon is beacon header + list of arbitrary information elements.
Ptr< MeshWifiInterfaceMac > m_parent
parent
PlinkFrameStart ParsePlinkFrame(Ptr< const Packet > packet)
Parses the start of the frame, where no WifiInformationElements exist.
Describes Mesh Configuration Element see 7.3.2.86 of 802.11s draft 3.0.
This is plugin to Mesh WiFi MAC, which implements the interface to dot11s peer management protocol: i...
void Report(std::ostream &) const
Report statistics.
bool Receive(Ptr< Packet > packet, const WifiMacHeader &header)
Receive and process a packet.
Mac48Address GetAddress() const
debug only, used to print established links
void SetParent(Ptr< MeshWifiInterfaceMac > parent)
Set pointer to parent.
Ptr< PeerManagementProtocol > m_protocol
protocol
WifiMacDropReason
The reason why an MPDU was dropped.
Definition: wifi-mac.h:54
Ptr< Packet > CreatePeerLinkConfirmFrame()
Create peer link confirm frame function.
Implements the IEEE 802.11 MAC header.
802.11s Peer Management Protocol model