A Discrete-Event Network Simulator
API
vsa-manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Dalian University of Technology
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  * Author: Junling Bu <linlinjavaer@gmail.com>
17  */
18 #ifndef VSA_MANAGER_H
19 #define VSA_MANAGER_H
20 #include "wave-net-device.h"
21 
22 #include <vector>
23 
24 namespace ns3
25 {
26 
36 {
40 };
41 
63 struct VsaInfo
64 {
67  uint8_t managementId;
69  uint32_t channelNumber;
70  uint8_t repeatRate;
72 
84  OrganizationIdentifier identifier,
85  uint8_t manageId,
86  Ptr<Packet> vscPacket,
87  uint32_t channel,
88  uint8_t repeat,
89  VsaTransmitInterval interval)
90  : peer(peer),
91  oi(identifier),
92  managementId(manageId),
93  vsc(vscPacket),
95  repeatRate(repeat),
96  sendInterval(interval)
97  {
98  }
99 };
100 
124 class VsaManager : public Object
125 {
126  public:
131  static TypeId GetTypeId();
132  VsaManager();
133  ~VsaManager() override;
134 
139 
144  void SetWaveVsaCallback(
145  Callback<bool, Ptr<const Packet>, const Address&, uint32_t, uint32_t> vsaCallback);
146 
150  void SendVsa(const VsaInfo& vsaInfo);
154  void RemoveAll();
158  void RemoveByChannel(uint32_t channelNumber);
163 
164  private:
165  void DoDispose() override;
166  void DoInitialize() override;
167 
176  const OrganizationIdentifier& oi,
177  Ptr<const Packet> vsc,
178  const Address& src);
179 
181  const static uint32_t VSA_REPEAT_PERIOD = 5;
182 
184  struct VsaWork
185  {
189  uint32_t channelNumber;
193  };
194 
200  void DoRepeat(VsaWork* vsa);
208  void DoSendVsa(VsaTransmitInterval interval,
209  uint32_t channel,
210  Ptr<Packet> vsc,
212  Mac48Address peer);
213 
214  Callback<bool, Ptr<const Packet>, const Address&, uint32_t, uint32_t>
216  std::vector<VsaWork*> m_vsas;
218 };
219 
220 } // namespace ns3
221 #endif /* VSA_MANAGER_H */
a polymophic address class
Definition: address.h:100
Callback template class.
Definition: callback.h:443
An identifier for simulation events.
Definition: event-id.h:55
an EUI-48 address
Definition: mac48-address.h:46
A base class which provides memory management and object aggregation.
Definition: object.h:89
the organization identifier is a public organizationally unique identifier assigned by the IEEE.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:60
refer to 1609.4-2010 chapter 6.4 Vendor Specific Action (VSA) frames transmission.
Definition: vsa-manager.h:125
void RemoveAll()
cancel all VSA transmissions
Definition: vsa-manager.cc:208
void SetWaveVsaCallback(Callback< bool, Ptr< const Packet >, const Address &, uint32_t, uint32_t > vsaCallback)
Set wave vsa callback function.
Definition: vsa-manager.cc:270
void DoInitialize() override
Initialize() implementation.
Definition: vsa-manager.cc:68
Ptr< WaveNetDevice > m_device
the device
Definition: vsa-manager.h:217
static const uint32_t VSA_REPEAT_PERIOD
A number of VSA frames will be transmitted repeatedly during the period of 5s.
Definition: vsa-manager.h:181
void DoRepeat(VsaWork *vsa)
Definition: vsa-manager.cc:119
void DoDispose() override
Destructor implementation.
Definition: vsa-manager.cc:60
bool ReceiveVsc(Ptr< WifiMac > mac, const OrganizationIdentifier &oi, Ptr< const Packet > vsc, const Address &src)
Definition: vsa-manager.cc:278
void DoSendVsa(VsaTransmitInterval interval, uint32_t channel, Ptr< Packet > vsc, OrganizationIdentifier oi, Mac48Address peer)
Definition: vsa-manager.cc:127
void SetWaveNetDevice(Ptr< WaveNetDevice > device)
Definition: vsa-manager.cc:78
Callback< bool, Ptr< const Packet >, const Address &, uint32_t, uint32_t > m_vsaReceived
VSA received callback.
Definition: vsa-manager.h:215
~VsaManager() override
Definition: vsa-manager.cc:55
static TypeId GetTypeId()
Get the type ID.
Definition: vsa-manager.cc:40
std::vector< VsaWork * > m_vsas
VSAs.
Definition: vsa-manager.h:216
void RemoveByChannel(uint32_t channelNumber)
Definition: vsa-manager.cc:224
void RemoveByOrganizationIdentifier(const OrganizationIdentifier &oi)
Definition: vsa-manager.cc:247
void SendVsa(const VsaInfo &vsaInfo)
Definition: vsa-manager.cc:85
VsaTransmitInterval
indicate which interval the VSA frames will be transmitted in.
Definition: vsa-manager.h:36
@ VSA_TRANSMIT_IN_CCHI
Definition: vsa-manager.h:37
@ VSA_TRANSMIT_IN_BOTHI
Definition: vsa-manager.h:39
@ VSA_TRANSMIT_IN_SCHI
Definition: vsa-manager.h:38
Every class exported by the ns3 library is enclosed in the ns3 namespace.
channel
Definition: third.py:81
mac
Definition: third.py:85
uint8_t managementId
management ID
Definition: vsa-manager.h:67
VsaInfo(Mac48Address peer, OrganizationIdentifier identifier, uint8_t manageId, Ptr< Packet > vscPacket, uint32_t channel, uint8_t repeat, VsaTransmitInterval interval)
Initializer.
Definition: vsa-manager.h:83
VsaTransmitInterval sendInterval
send interval
Definition: vsa-manager.h:71
uint32_t channelNumber
channel number
Definition: vsa-manager.h:69
uint8_t repeatRate
repeat rate
Definition: vsa-manager.h:70
Mac48Address peer
peer
Definition: vsa-manager.h:65
Ptr< Packet > vsc
VSC.
Definition: vsa-manager.h:68
OrganizationIdentifier oi
OI.
Definition: vsa-manager.h:66
VsaWork structure.
Definition: vsa-manager.h:185
Mac48Address peer
peer
Definition: vsa-manager.h:186
Ptr< Packet > vsc
VSC.
Definition: vsa-manager.h:188
Time repeatPeriod
repeat period
Definition: vsa-manager.h:191
OrganizationIdentifier oi
OI.
Definition: vsa-manager.h:187
VsaTransmitInterval sentInterval
VSA transmit interval.
Definition: vsa-manager.h:190
uint32_t channelNumber
channel number
Definition: vsa-manager.h:189
EventId repeat
repeat ID
Definition: vsa-manager.h:192