author | Kirill Andreev <andreev@iitp.ru> |
Wed, 25 Mar 2009 12:23:12 +0300 | |
changeset 4876 | d78f1b978dac |
parent 4874 | f7ea3717e668 |
child 4877 | f08902c42733 |
permissions | -rw-r--r-- |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
1 |
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
2 |
/* |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
3 |
* Copyright (c) 2008,2009 IITP RAS |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
4 |
* |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
8 |
* |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
13 |
* |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
17 |
* |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
18 |
* Authors: Kirill Andreev <andreev@iitp.ru> |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
19 |
* Aleksey Kovalenko <kovalenko@iitp.ru> |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
20 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
21 |
|
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
22 |
|
4858
78437693dcc7
Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents:
4857
diff
changeset
|
23 |
#ifndef DOT11S_PEER_MAN_H |
78437693dcc7
Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents:
4857
diff
changeset
|
24 |
#define DOT11S_PEER_MAN_H |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
25 |
|
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
26 |
#include "ns3/mac48-address.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
27 |
#include "ns3/wifi-net-device.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
28 |
#include "ns3/ie-dot11s-peer-management.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
29 |
#include "ns3/ie-dot11s-beacon-timing.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
30 |
#include "ns3/ie-dot11s-configuration.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
31 |
#include "ns3/event-id.h" |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
32 |
|
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
33 |
#include <list> |
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
34 |
#include <map> |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
35 |
namespace ns3 { |
4872 | 36 |
namespace dot11s { |
4873 | 37 |
class PeerManagerMacPlugin; |
4865
e331ed5d3662
Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
4861
diff
changeset
|
38 |
class PeerLink; |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
39 |
/** |
4860
bb5194d57734
New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents:
4858
diff
changeset
|
40 |
* \ingroup dot11s |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
41 |
*/ |
4873 | 42 |
class PeerManagerProtocol : public Object |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
43 |
{ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
44 |
public: |
4873 | 45 |
PeerManagerProtocol (); |
46 |
~PeerManagerProtocol (); |
|
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
47 |
static TypeId GetTypeId (); |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
48 |
bool AttachInterfaces(std::vector<Ptr<WifiNetDevice> >); |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
49 |
/** \brief Methods that handle beacon sending/receiving procedure. |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
50 |
* This methods interact with MAC_layer plug-in |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
51 |
* \{ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
52 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
53 |
/** |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
54 |
* \brief When we are sending a beacon - we fill beacon timing |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
55 |
* element |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
56 |
* \param IeBeaconTiming is a beacon timing element that |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
57 |
* should be present in beacon |
4861 | 58 |
* \param interface is a interface sending a beacon |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
59 |
*/ |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
60 |
Ptr<IeBeaconTiming> GetBeaconTimingElement(uint32_t interface); |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
61 |
/** |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
62 |
* \brief When we receive a beacon from peer-station, we remember |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
63 |
* its beacon timing element (needed for peer choosing mechanism), |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
64 |
* and remember beacon timers - last beacon and beacon interval to |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
65 |
* detect beacon loss and cancel links |
4861 | 66 |
* \param interface is a interface on which beacon was received |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
67 |
* \param timingElement is a timing element of remote beacon |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
68 |
*/ |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
69 |
void UpdatePeerBeaconTiming( |
4861 | 70 |
uint32_t interface, |
71 |
bool meshBeacon, |
|
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
72 |
IeBeaconTiming timingElement, |
4861 | 73 |
Mac48Address peerAddress, |
74 |
Time receivingTime, |
|
75 |
Time beaconInterval |
|
76 |
); |
|
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
77 |
/** |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
78 |
* \} |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
79 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
80 |
/** |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
81 |
* \brief Methods that handle Peer link management frames |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
82 |
* interaction: |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
83 |
* \{ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
84 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
85 |
/** |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
86 |
* Deliver Peer link management information to the protocol-part |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
87 |
* \param void is returning value - we pass a frame and forget |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
88 |
* about it |
4861 | 89 |
* \param uint32_t - is a interface ID of a given MAC (interfaceID rather |
90 |
* than MAC address, beacause many interfaces may have the same MAC) |
|
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
91 |
* \param Mac48Address is address of peer |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
92 |
* \param uint16_t is association ID, which peer has assigned to |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
93 |
* us |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
94 |
* \param IeConfiguration is mesh configuration element |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
95 |
* taken from the peer management frame |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
96 |
* \param IePeerManagement is peer link management element |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
97 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
98 |
void ReceivePeerLinkFrame( |
4861 | 99 |
uint32_t interface, |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
100 |
Mac48Address peerAddress, |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
101 |
uint16_t aid, |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
102 |
IePeerManagement peerManagementElement, |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
103 |
IeConfiguration meshConfig |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
104 |
); |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
105 |
/** |
4867
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
106 |
* Cancell peer link due to broken configuration (SSID or Supported |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
107 |
* rates) |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
108 |
*/ |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
109 |
void ConfigurationMismatch (uint32_t interface, Mac48Address peerAddress); |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
110 |
/** |
4870
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
111 |
* Checks if there is established link |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
112 |
*/ |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
113 |
bool IsActiveLink (uint32_t interface, Mac48Address peerAddress); |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
114 |
/** |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
115 |
* \} |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
116 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
117 |
private: |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
118 |
///\name Private structures |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
119 |
///\{ |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
120 |
///\brief keeps information about beacon of peer station: |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
121 |
/// beacon interval, association ID, last time we have received a |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
122 |
/// beacon |
4861 | 123 |
struct BeaconInfo |
124 |
{ |
|
125 |
uint16_t aid; //Assoc ID |
|
126 |
Time referenceTbtt; //When one of my station's beacons was put into a beacon queue; |
|
127 |
Time beaconInterval; //Beacon interval of my station; |
|
128 |
}; |
|
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
129 |
/// We keep a vector of pointers to PeerLink class. This vector |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
130 |
/// keeps all peer links at a given interface. |
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
131 |
typedef std::vector<Ptr<PeerLink> > PeerLinksOnInterface; |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
132 |
/// This map keeps all peer links. |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
133 |
///\param uint32_t is interface ID |
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
134 |
typedef std::map<uint32_t, PeerLinksOnInterface> PeerLinksMap; |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
135 |
///\brief This map keeps relationship between peer address and its |
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
136 |
/// beacon information |
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
137 |
typedef std::map<Mac48Address, BeaconInfo> BeaconsOnInterface; |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
138 |
///\brief This map keeps beacon information on all intefaces |
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
139 |
typedef std::map<uint32_t, BeaconsOnInterface> BeaconInfoMap; |
4876
d78f1b978dac
Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents:
4874
diff
changeset
|
140 |
///\brief this vector keeps pointers to MAC-plugins |
4873 | 141 |
typedef std::map<uint32_t, Ptr<PeerManagerMacPlugin> > PeerManagerPluginMap; |
4874
f7ea3717e668
Code cleanups. Software delay is removed
Kirill Andreev <andreev@iitp.ru>
parents:
4873
diff
changeset
|
142 |
///\} |
4867
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
143 |
private: |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
144 |
/** |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
145 |
* Return a position in beacon-storage for a given remote station |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
146 |
*/ |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
147 |
void FillBeaconInfo(uint32_t interface, Mac48Address peerAddress, Time receivingTime, Time beaconInterval); |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
148 |
Ptr<PeerLink> InitiateLink (uint32_t interface, Mac48Address peerAddress, Time lastBeacon, Time beaconInterval); |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
149 |
/** |
4874
f7ea3717e668
Code cleanups. Software delay is removed
Kirill Andreev <andreev@iitp.ru>
parents:
4873
diff
changeset
|
150 |
* \name External peer-chooser |
4867
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
151 |
* \{ |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
152 |
*/ |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
153 |
bool ShouldSendOpen (uint32_t interface, Mac48Address peerAddress); |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
154 |
bool ShouldAcceptOpen (uint32_t interface, Mac48Address peerAddress, dot11sReasonCode & reasonCode); |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
155 |
/** |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
156 |
* \} |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
157 |
* \brief Indicates changes in peer links |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
158 |
*/ |
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
159 |
void PeerLinkStatus (uint32_t interface, Mac48Address peerAddress, bool status); |
4870
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
160 |
/** |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
161 |
* Removes all links which are idle |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
162 |
*/ |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
163 |
void PeerCleanup (); |
4867
3a02e4e89292
Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents:
4866
diff
changeset
|
164 |
private: |
4861 | 165 |
PeerManagerPluginMap m_plugins; |
166 |
/** |
|
4874
f7ea3717e668
Code cleanups. Software delay is removed
Kirill Andreev <andreev@iitp.ru>
parents:
4873
diff
changeset
|
167 |
* \name Information related to beacons: |
4861 | 168 |
* \{ |
169 |
*/ |
|
170 |
BeaconInfoMap m_neighbourBeacons; |
|
171 |
static const uint8_t m_maxBeaconLoss = 3; |
|
4874
f7ea3717e668
Code cleanups. Software delay is removed
Kirill Andreev <andreev@iitp.ru>
parents:
4873
diff
changeset
|
172 |
///\} |
4861 | 173 |
uint16_t m_lastAssocId; |
174 |
uint16_t m_lastLocalLinkId; |
|
4866
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
175 |
uint8_t m_numberOfActivePeers; //number of established peer links |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
176 |
uint8_t m_maxNumberOfPeerLinks; |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
177 |
/** |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
178 |
* Peer Links |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
179 |
* \{ |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
180 |
*/ |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
181 |
PeerLinksMap m_peerLinks; |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
182 |
/** |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
183 |
* \} |
564372fc5491
First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents:
4865
diff
changeset
|
184 |
*/ |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
185 |
/** |
4870
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
186 |
* Periodically we scan the peer manager list of peers |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
187 |
* and check if the too many beacons were lost: |
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
188 |
* \{ |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
189 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
190 |
Time m_peerLinkCleanupPeriod; |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
191 |
EventId m_cleanupEvent; |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
192 |
/** |
4870
79f9c2b6dffc
Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents:
4867
diff
changeset
|
193 |
* \} |
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
194 |
*/ |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
195 |
}; |
4872 | 196 |
|
197 |
} // namespace dot11s |
|
4857
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
198 |
} //namespace ns3 |
ddfb13420455
Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff
changeset
|
199 |
#endif |