A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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:
54  static TypeId GetTypeId ();
55  void DoDispose ();
77  Ptr<IeBeaconTiming> GetBeaconTimingElement (uint32_t interface);
85  void ReceiveBeacon (uint32_t interface, Mac48Address peerAddress, Time beaconInterval, Ptr<IeBeaconTiming> beaconTiming);
86  // \}
104  void ReceivePeerLinkFrame (
105  uint32_t interface,
106  Mac48Address peerAddress,
107  Mac48Address peerMeshPointAddress,
108  uint16_t aid,
109  IePeerManagement peerManagementElement,
110  IeConfiguration meshConfig
111  );
116  void ConfigurationMismatch (uint32_t interface, Mac48Address peerAddress);
120  void TransmissionFailure (uint32_t interface, const Mac48Address peerAddress);
124  void TransmissionSuccess (uint32_t interface, const Mac48Address peerAddress);
128  bool IsActiveLink (uint32_t interface, Mac48Address peerAddress);
129  // \}
131  // \{
135  Ptr<PeerLink> FindPeerLink (uint32_t interface, Mac48Address peerAddress);
137  std::vector < Ptr<PeerLink> > GetPeerLinks () const;
139  std::vector<Mac48Address> GetPeers (uint32_t interface) const;
142  uint8_t GetNumberOfLinks ();
143  void SetMeshId (std::string s);
144  Ptr<IeMeshId> GetMeshId () const;
146  void SetBeaconCollisionAvoidance (bool enable);
147  bool GetBeaconCollisionAvoidance () const;
149  void NotifyBeaconSent (uint32_t interface, Time beaconInterval);
151  void Report (std::ostream &) const;
152  void ResetStats ();
161  int64_t AssignStreams (int64_t stream);
162 
163 private:
164  virtual void DoInitialize ();
169 
170  struct BeaconInfo
171  {
172  uint16_t aid; //Assoc ID
173  Time referenceTbtt; //When one of my station's beacons was put into a beacon queue;
174  Time beaconInterval; //Beacon interval of my station;
175  };
178  typedef std::vector<Ptr<PeerLink> > PeerLinksOnInterface;
180  typedef std::map<uint32_t, PeerLinksOnInterface> PeerLinksMap;
182  typedef std::map<Mac48Address, BeaconInfo> BeaconsOnInterface;
184  typedef std::map<uint32_t, BeaconsOnInterface> BeaconInfoMap;
186  typedef std::map<uint32_t, Ptr<PeerManagementProtocolMac> > PeerManagementProtocolMacMap;
187  // \}
188 private:
191 
193  uint32_t interface,
194  Mac48Address peerAddress,
195  Mac48Address peerMeshPointAddress
196  );
201  bool ShouldSendOpen (uint32_t interface, Mac48Address peerAddress);
202  bool ShouldAcceptOpen (uint32_t interface, Mac48Address peerAddress, PmpReasonCode & reasonCode);
207  void PeerLinkStatus (uint32_t interface, Mac48Address peerAddress, Mac48Address peerMeshPointAddres, PeerLink::PeerState ostate, PeerLink::PeerState nstate);
209  void CheckBeaconCollisions (uint32_t interface);
210  void ShiftOwnBeacon (uint32_t interface);
215  Time TuToTime (int x);
216  int TimeToTu (Time x);
217  // \}
218 
220  void NotifyLinkOpen (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface);
222  void NotifyLinkClose (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface);
223 private:
227 
228  uint16_t m_lastAssocId;
236  std::map<uint32_t, Time> m_lastBeacon;
238  std::map<uint32_t, Time> m_beaconInterval;
239 
256 
263 
265  // \{
266  struct Statistics {
267  uint16_t linksTotal;
268  uint16_t linksOpened;
269  uint16_t linksClosed;
270 
271  Statistics (uint16_t t = 0);
272  void Print (std::ostream & os) const;
273  };
275  // \}
278 };
279 
280 } // namespace dot11s
281 } // namespace ns3
282 #endif