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 namespace dot11s {
29 class PeerManagementProtocol;
30 class IeConfiguration;
31 class IePeerManagement;
32 class PeerManagementProtocol;
43 {
44 public:
51  PeerManagementProtocolMac (uint32_t interface, Ptr<PeerManagementProtocol> protocol);
53 
54  // Inherited from plugin abstract class
66  bool Receive (Ptr<Packet> packet, const WifiMacHeader & header);
83  void UpdateBeacon (MeshWifiBeacon & beacon) const;
89  int64_t AssignStreams (int64_t stream);
91  // \{
92  void Report (std::ostream &) const;
93  void ResetStats ();
94  uint32_t GetLinkMetric (Mac48Address peerAddress);
95  // \}
96 
97 private:
107 
111  friend class PeerLink;
113  // \{
119  {
120  uint8_t subtype;
121  uint16_t aid;
123  uint16_t qos;
124  };
146  // \}
151  void TxError (WifiMacHeader const &hdr);
156  void TxOk (WifiMacHeader const &hdr);
157  // BCA functionality
162  void SetBeaconShift (Time shift);
177  Mac48Address peerAddress,
178  Mac48Address peerMpAddress,
179  uint16_t aid,
180  IePeerManagement peerElement,
181  IeConfiguration meshConfig
182  );
187  Mac48Address GetAddress () const;
189  struct Statistics
190  {
191  uint16_t txOpen;
192  uint16_t txConfirm;
193  uint16_t txClose;
194  uint16_t rxOpen;
195  uint16_t rxConfirm;
196  uint16_t rxClose;
197  uint16_t dropped;
198  uint16_t brokenMgt;
199  uint16_t txMgt;
200  uint32_t txMgtBytes;
201  uint16_t rxMgt;
202  uint32_t rxMgtBytes;
203  uint16_t beaconShift;
204 
206  Statistics ();
211  void Print (std::ostream & os) const;
212  };
213 
214 private:
218  uint32_t m_ifIndex;
220 };
221 
222 } // namespace dot11s
223 } // namespace ns3
224 
225 #endif /* PEER_MANAGEMENT_PROTOCOL_MAC_H */
226 
Ptr< Packet > CreatePeerLinkOpenFrame()
Create peer link open frame function.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
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)
PeerManagementProtocolMac & operator=(const PeerManagementProtocolMac &peer)
assignment operator
Ptr< Packet > CreatePeerLinkCloseFrame()
Create peer link clode frame 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
void TxOk(WifiMacHeader const &hdr)
Transmit OK function.
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...
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.
void TxError(WifiMacHeader const &hdr)
Closes link when a proper number of successive transmissions have failed.
Ptr< PeerManagementProtocol > m_protocol
protocol
Ptr< Packet > CreatePeerLinkConfirmFrame()
Create peer link confirm frame function.
Implements the IEEE 802.11 MAC header.
802.11s Peer Management Protocol model