A Discrete-Event Network Simulator
API
vsa-manager.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 Dalian University of Technology
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Junling Bu <linlinjavaer@gmail.com>
18  */
19 #ifndef VSA_MANAGER_H
20 #define VSA_MANAGER_H
21 #include <vector>
22 #include "wave-net-device.h"
23 
24 namespace ns3 {
25 
33 {
37 };
38 
59 struct VsaInfo
60 {
63  uint8_t managementId;
65  uint32_t channelNumber;
66  uint8_t repeatRate;
68 
69  VsaInfo (Mac48Address peer, OrganizationIdentifier identifier, uint8_t manageId, Ptr<Packet> vscPacket,
70  uint32_t channel, uint8_t repeat, enum VsaTransmitInterval interval)
71  : peer (peer),
72  oi (identifier),
73  managementId (manageId),
74  vsc (vscPacket),
75  channelNumber (channel),
76  repeatRate (repeat),
77  sendInterval (interval)
78  {
79 
80  }
81 };
82 
104 class VsaManager : public Object
105 {
106 public:
107  static TypeId GetTypeId (void);
108  VsaManager (void);
109  virtual ~VsaManager (void);
110 
114  void SetWaveNetDevice (Ptr<WaveNetDevice> device);
115 
116  void SetWaveVsaCallback (Callback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t> vsaCallback);
117 
121  void SendVsa (const VsaInfo &vsaInfo);
125  void RemoveAll (void);
129  void RemoveByChannel (uint32_t channelNumber);
134 private:
135  void DoDispose (void);
136  void DoInitialize (void);
137 
144  bool ReceiveVsc (Ptr<WifiMac> mac, const OrganizationIdentifier &oi, Ptr<const Packet> vsc, const Address &src);
145 
146  // A number of VSA frames will be transmitted repeatedly during the period of 5s.
147  const static uint32_t VSA_REPEAT_PERIOD = 5;
148 
149  struct VsaWork
150  {
154  uint32_t channelNumber;
158  };
159 
165  void DoRepeat (VsaWork *vsa);
173  void DoSendVsa (enum VsaTransmitInterval interval, uint32_t channel, Ptr<Packet> vsc, OrganizationIdentifier oi, Mac48Address peer);
174 
176  std::vector<VsaWork *> m_vsas;
178 };
179 
180 }
181 #endif /* VSA_MANAGER_H */
Ptr< WaveNetDevice > m_device
Definition: vsa-manager.h:177
tuple channel
Definition: third.py:85
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Callback template class.
Definition: callback.h:1176
static const uint32_t VSA_REPEAT_PERIOD
Definition: vsa-manager.h:147
refer to 1609.4-2010 chapter 6.4 Vendor Specific Action (VSA) frames transmission.
Definition: vsa-manager.h:104
virtual ~VsaManager(void)
Definition: vsa-manager.cc:52
void SendVsa(const VsaInfo &vsaInfo)
Definition: vsa-manager.cc:83
void SetWaveVsaCallback(Callback< bool, Ptr< const Packet >, const Address &, uint32_t, uint32_t > vsaCallback)
Definition: vsa-manager.cc:255
Ptr< Packet > vsc
Definition: vsa-manager.h:64
a polymophic address class
Definition: address.h:90
void DoSendVsa(enum VsaTransmitInterval interval, uint32_t channel, Ptr< Packet > vsc, OrganizationIdentifier oi, Mac48Address peer)
Definition: vsa-manager.cc:125
static TypeId GetTypeId(void)
Definition: vsa-manager.cc:36
enum VsaTransmitInterval sentInterval
Definition: vsa-manager.h:155
uint8_t managementId
Definition: vsa-manager.h:63
void DoInitialize(void)
Initialize() implementation.
Definition: vsa-manager.cc:66
the organization identifier is a public organizationally unique identifier assigned by the IEEE...
void DoDispose(void)
Destructor implementation.
Definition: vsa-manager.cc:58
void SetWaveNetDevice(Ptr< WaveNetDevice > device)
Definition: vsa-manager.cc:76
void DoRepeat(VsaWork *vsa)
Definition: vsa-manager.cc:117
tuple mac
Definition: third.py:92
std::vector< VsaWork * > m_vsas
Definition: vsa-manager.h:176
Every class exported by the ns3 library is enclosed in the ns3 namespace.
VsaTransmitInterval
indicate which interval the VSA frames will be transmitted in.
Definition: vsa-manager.h:32
uint32_t channelNumber
Definition: vsa-manager.h:65
an EUI-48 address
Definition: mac48-address.h:43
Mac48Address peer
Definition: vsa-manager.h:61
uint8_t repeatRate
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)
Definition: vsa-manager.h:69
void RemoveByChannel(uint32_t channelNumber)
Definition: vsa-manager.cc:206
An identifier for simulation events.
Definition: event-id.h:53
OrganizationIdentifier oi
Definition: vsa-manager.h:62
OrganizationIdentifier oi
Definition: vsa-manager.h:152
A base class which provides memory management and object aggregation.
Definition: object.h:87
Callback< bool, Ptr< const Packet >, const Address &, uint32_t, uint32_t > m_vsaReceived
Definition: vsa-manager.h:175
a unique identifier for an interface.
Definition: type-id.h:58
void RemoveAll(void)
cancel all VSA transmissions
Definition: vsa-manager.cc:189
bool ReceiveVsc(Ptr< WifiMac > mac, const OrganizationIdentifier &oi, Ptr< const Packet > vsc, const Address &src)
Definition: vsa-manager.cc:262
void RemoveByOrganizationIdentifier(const OrganizationIdentifier &oi)
Definition: vsa-manager.cc:231
enum VsaTransmitInterval sendInterval
Definition: vsa-manager.h:67