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
24namespace ns3
25{
26
36{
40};
41
63struct VsaInfo
64{
67 uint8_t managementId;
70 uint8_t repeatRate;
72
84 OrganizationIdentifier identifier,
85 uint8_t manageId,
86 Ptr<Packet> vscPacket,
88 uint8_t repeat,
89 enum VsaTransmitInterval interval)
90 : peer(peer),
91 oi(identifier),
92 managementId(manageId),
93 vsc(vscPacket),
95 repeatRate(repeat),
96 sendInterval(interval)
97 {
98 }
99};
100
124class VsaManager : public Object
125{
126 public:
131 static TypeId GetTypeId();
132 VsaManager();
133 ~VsaManager() override;
134
139
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,
178 const Address& src);
179
181 const static uint32_t VSA_REPEAT_PERIOD = 5;
182
184 struct VsaWork
185 {
193 };
194
200 void DoRepeat(VsaWork* vsa);
208 void DoSendVsa(enum VsaTransmitInterval interval,
210 Ptr<Packet> vsc,
212 Mac48Address peer);
213
216 std::vector<VsaWork*> m_vsas;
218};
219
220} // namespace ns3
221#endif /* VSA_MANAGER_H */
a polymophic address class
Definition: address.h:92
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
void DoSendVsa(enum VsaTransmitInterval interval, uint32_t channel, Ptr< Packet > vsc, OrganizationIdentifier oi, Mac48Address peer)
Definition: vsa-manager.cc:127
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 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
uint32_t channelNumber
channel number
Definition: vsa-manager.h:69
enum VsaTransmitInterval sendInterval
send interval
Definition: vsa-manager.h:71
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
VsaInfo(Mac48Address peer, OrganizationIdentifier identifier, uint8_t manageId, Ptr< Packet > vscPacket, uint32_t channel, uint8_t repeat, enum VsaTransmitInterval interval)
Initializer.
Definition: vsa-manager.h:83
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
uint32_t channelNumber
channel number
Definition: vsa-manager.h:189
EventId repeat
repeat ID
Definition: vsa-manager.h:192
enum VsaTransmitInterval sentInterval
VSA transmit interval.
Definition: vsa-manager.h:190