A Discrete-Event Network Simulator
API
ocb-wifi-mac.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  * Copyright (c) 2013 Dalian University of Technology
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20  * Junling Bu <linlinjavaer@gmail.com>
21  */
22 #include "ns3/pointer.h"
23 #include "ns3/log.h"
24 #include "ns3/string.h"
25 #include "ns3/mac-low.h"
26 #include "ns3/dcf-manager.h"
27 #include "ns3/mac-rx-middle.h"
28 #include "ns3/mgt-headers.h"
29 #include "wave-mac-low.h"
30 #include "ocb-wifi-mac.h"
31 #include "vendor-specific-action.h"
32 #include "higher-tx-tag.h"
33 
34 namespace ns3 {
35 
36 NS_LOG_COMPONENT_DEFINE ("OcbWifiMac");
37 
38 NS_OBJECT_ENSURE_REGISTERED (OcbWifiMac);
39 
42 
43 TypeId
45 {
46  static TypeId tid = TypeId ("ns3::OcbWifiMac")
48  .SetGroupName ("Wave")
49  .AddConstructor<OcbWifiMac> ()
50  ;
51  return tid;
52 }
53 
55 {
56  NS_LOG_FUNCTION (this);
57  // Let the lower layers know that we are acting as an OCB node
59  // BSSID is still needed in the low part of MAC
60  RegularWifiMac::SetBssid (WILDCARD_BSSID);
61 }
62 
64 {
65  NS_LOG_FUNCTION (this);
66 }
67 
68 void
70 {
71  NS_LOG_FUNCTION (this << vsc << peer << oi);
72  WifiMacHeader hdr;
73  hdr.SetAction ();
74  hdr.SetAddr1 (peer);
75  hdr.SetAddr2 (GetAddress ());
76  hdr.SetAddr3 (WILDCARD_BSSID);
77  hdr.SetDsNotFrom ();
78  hdr.SetDsNotTo ();
81  vsc->AddHeader (vsa);
82 
83  if (m_qosSupported)
84  {
85  uint8_t tid = QosUtilsGetTidForPacket (vsc);
86  tid = tid > 7 ? 0 : tid;
87  m_edca[QosUtilsMapTidToAc (tid)]->Queue (vsc, hdr);
88  }
89  else
90  {
91  m_dca->Queue (vsc, hdr);
92  }
93 }
94 
95 void
97 {
98  NS_LOG_FUNCTION (this << oi << &cb);
100 }
101 
102 void
104 {
105  NS_LOG_FUNCTION (this << oi);
107 }
108 
109 void
111 {
112  NS_LOG_WARN ("in OCB mode we should not call SetSsid");
113 }
114 
115 Ssid
117 {
118  NS_LOG_WARN ("in OCB mode we should not call GetSsid");
119  // we really do not want to return ssid, however we have to provide
120  return RegularWifiMac::GetSsid ();
121 }
122 
123 
124 void
126 {
127  NS_LOG_WARN ("in OCB mode we should not call SetBsid");
128 }
129 
132 {
133  NS_LOG_WARN ("in OCB mode we should not call GetBssid");
134  return WILDCARD_BSSID;
135 }
136 
137 void
139 {
140  NS_LOG_FUNCTION (this << &linkUp);
142 
143  // The approach taken here is that, from the point of view of a STA
144  // in OCB mode, the link is always up, so we immediately invoke the
145  // callback if one is set
146  linkUp ();
147 }
148 
149 void
151 {
152  NS_LOG_FUNCTION (this << &linkDown);
154  NS_LOG_WARN ("in OCB mode the like will never down, so linkDown will never be called");
155 }
156 
157 void
159 {
160  NS_LOG_FUNCTION (this << packet << to);
161  if (m_stationManager->IsBrandNew (to))
162  {
163  //In ad hoc mode, we assume that every destination supports all
164  //the rates we support.
166  {
169  }
170  if (m_vhtSupported)
171  {
173  }
176  }
177 
178  WifiMacHeader hdr;
179 
180  // If we are not a QoS STA then we definitely want to use AC_BE to
181  // transmit the packet. A TID of zero will map to AC_BE (through \c
182  // QosUtilsMapTidToAc()), so we use that as our default here.
183  uint8_t tid = 0;
184 
185  if (m_qosSupported)
186  {
189  hdr.SetQosNoEosp ();
190  hdr.SetQosNoAmsdu ();
191  // About transmission of multiple frames,
192  // in Ad-hoc mode TXOP is not supported for now, so TxopLimit=0;
193  // however in OCB mode, 802.11p do not allow transmit multiple frames
194  // so TxopLimit must equal 0
195  hdr.SetQosTxopLimit (0);
196 
197  // Fill in the QoS control field in the MAC header
198  tid = QosUtilsGetTidForPacket (packet);
199  // Any value greater than 7 is invalid and likely indicates that
200  // the packet had no QoS tag, so we revert to zero, which'll
201  // mean that AC_BE is used.
202  if (tid > 7)
203  {
204  tid = 0;
205  }
206  hdr.SetQosTid (tid);
207  }
208  else
209  {
210  hdr.SetTypeData ();
211  }
212 
214  {
215  hdr.SetNoOrder ();
216  }
217  hdr.SetAddr1 (to);
218  hdr.SetAddr2 (GetAddress ());
219  hdr.SetAddr3 (WILDCARD_BSSID);
220  hdr.SetDsNotFrom ();
221  hdr.SetDsNotTo ();
222 
223  if (m_qosSupported)
224  {
225  // Sanity check that the TID is valid
226  NS_ASSERT (tid < 8);
227  m_edca[QosUtilsMapTidToAc (tid)]->Queue (packet, hdr);
228  }
229  else
230  {
231  m_dca->Queue (packet, hdr);
232  }
233 }
234 
235 /*
236  * see 802.11p-2010 chapter 11.19
237  * here we only care about data packet and vsa management frame
238  */
239 void
241 {
242  NS_LOG_FUNCTION (this << packet << hdr);
243  NS_ASSERT (!hdr->IsCtl ());
244  NS_ASSERT (hdr->GetAddr3 () == WILDCARD_BSSID);
245 
246  Mac48Address from = hdr->GetAddr2 ();
247  Mac48Address to = hdr->GetAddr1 ();
248 
249  if (m_stationManager->IsBrandNew (from))
250  {
251  //In ad hoc mode, we assume that every destination supports all
252  //the rates we support.
254  {
257  }
258  if (m_vhtSupported)
259  {
261  }
264  }
265 
266  if (hdr->IsData ())
267  {
268  if (hdr->IsQosData () && hdr->IsQosAmsdu ())
269  {
270  NS_LOG_DEBUG ("Received A-MSDU from" << from);
271  DeaggregateAmsduAndForward (packet, hdr);
272  }
273  else
274  {
275  ForwardUp (packet, from, to);
276  }
277  return;
278  }
279 
280  // why put check here, not before "if (hdr->IsData ())" ?
281  // because WifiNetDevice::ForwardUp needs to m_promiscRx data packet
282  // and will filter data packet for itself
283  // so we need to filter management frame
284  if (to != GetAddress () && !to.IsGroup ())
285  {
286  NS_LOG_LOGIC ("the management frame is not for us");
287  NotifyRxDrop (packet);
288  return;
289  }
290 
291  if (hdr->IsMgt () && hdr->IsAction ())
292  {
293  // yes, we only care about VendorSpecificAction frame in OCB mode
294  // other management frames will be handled by RegularWifiMac::Receive
296  packet->PeekHeader (vsaHdr);
297  if (vsaHdr.GetCategory () == CATEGORY_OF_VSA)
298  {
300  packet->RemoveHeader (vsa);
303 
304  if (cb.IsNull ())
305  {
306  NS_LOG_DEBUG ("cannot find VscCallback for OrganizationIdentifier=" << oi);
307  return;
308  }
309  bool succeed = cb (this, oi,packet, from);
310 
311  if (!succeed)
312  {
313  NS_LOG_DEBUG ("vsc callback could not handle the packet successfully");
314  }
315 
316  return;
317  }
318  }
319  // Invoke the receive handler of our parent class to deal with any
320  // other frames. Specifically, this will handle Block Ack-related
321  // Management Action frames.
322  RegularWifiMac::Receive (packet, hdr);
323 }
324 
325 void
326 OcbWifiMac::ConfigureEdca (uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
327 {
328  NS_LOG_FUNCTION (this << cwmin << cwmax << aifsn << ac);
329  Ptr<DcaTxop> dcf;
330  switch (ac)
331  {
332  case AC_VO:
334  dcf->SetMinCw ((cwmin + 1) / 4 - 1);
335  dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
336  dcf->SetAifsn (aifsn);
337  break;
338  case AC_VI:
340  dcf->SetMinCw ((cwmin + 1) / 2 - 1);
341  dcf->SetMaxCw (cwmin);
342  dcf->SetAifsn (aifsn);
343  break;
344  case AC_BE:
346  dcf->SetMinCw (cwmin);
347  dcf->SetMaxCw (cwmax);
348  dcf->SetAifsn (aifsn);
349  break;
350  case AC_BK:
352  dcf->SetMinCw (cwmin);
353  dcf->SetMaxCw (cwmax);
354  dcf->SetAifsn (aifsn);
355  break;
356  case AC_BE_NQOS:
358  dcf->SetMinCw (cwmin);
359  dcf->SetMaxCw (cwmax);
360  dcf->SetAifsn (aifsn);
361  break;
362  case AC_UNDEF:
363  NS_FATAL_ERROR ("I don't know what to do with this");
364  break;
365  }
366 }
367 
368 void
370 {
371  NS_LOG_FUNCTION (this << standard);
373  || (standard == WIFI_PHY_STANDARD_80211a));
374 
375  uint32_t cwmin = 15;
376  uint32_t cwmax = 1023;
377 
378  // The special value of AC_BE_NQOS which exists in the Access
379  // Category enumeration allows us to configure plain old DCF.
380  ConfigureEdca (cwmin, cwmax, 2, AC_BE_NQOS);
381 
382  // Now we configure the EDCA functions
383  // see IEEE802.11p-2010 section 7.3.2.29
384  // Wave CCH and SCHs set default 802.11p EDCA
385  ConfigureEdca (cwmin, cwmax, 2, AC_VO);
386  ConfigureEdca (cwmin, cwmax, 3, AC_VI);
387  ConfigureEdca (cwmin, cwmax, 6, AC_BE);
388  ConfigureEdca (cwmin, cwmax, 9, AC_BK);
389 }
390 
391 
392 void
394 {
395  NS_LOG_FUNCTION (this);
397  m_low->NotifySleepNow ();
398 }
399 
400 void
402 {
403  NS_LOG_FUNCTION (this);
404  // wake-up operation is not required in m_low object
406 }
407 
408 void
410 {
411  NS_LOG_FUNCTION (this << duration);
413 }
414 
415 void
417 {
418  NS_LOG_FUNCTION (this << ac);
419  Ptr<EdcaTxopN> queue = m_edca.find (ac)->second;
420  NS_ASSERT (queue != 0);
421  // reset and flush queue
422  queue->NotifyChannelSwitching ();
423 }
424 
425 void
427 {
428  NS_LOG_FUNCTION (this);
429  // The switching event is used to notify MAC entity reset its operation.
432 }
433 
434 void
436 {
437  NS_LOG_FUNCTION (this << device);
438  // To extend current OcbWifiMac for WAVE 1609.4, we shall use WaveMacLow instead of MacLow
439  m_low = CreateObject<WaveMacLow> ();
440  (DynamicCast<WaveMacLow> (m_low))->SetWaveNetDevice (device);
443  m_dca->SetLow (m_low);
444  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
445  {
446  i->second->SetLow (m_low);
447  i->second->CompleteConfig ();
448  }
449 }
450 } // namespace ns3
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:267
void SetAction()
Set Type/Subtype values for an action header.
Ptr< DcfManager > m_dcfManager
DCF manager (access to channel)
void NotifyWakeupNow(void)
Notify the DCF that the device has been resumed from sleep mode.
Definition: dcf-manager.cc:681
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
void ConfigureEdca(uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
Callback template class.
Definition: callback.h:1176
void RegisterVscCallback(OrganizationIdentifier oi, VscCallback cb)
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)
void SetType(WifiMacType type)
Set Type/Subtype values with the correct values depending on the given type.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
void AddAllSupportedMcs(Mac48Address address)
Invoked in a STA or AP to store all of the MCS supported by a destination which is also supported loc...
virtual ~OcbWifiMac(void)
Definition: ocb-wifi-mac.cc:63
bool IsAction() const
Return true if the header is an Action header.
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
Mac48Address GetAddr3(void) const
Return the address in the Address 3 field.
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1270
void CancleTx(enum AcIndex ac)
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:67
void SendVsc(Ptr< Packet > vsc, Mac48Address peer, OrganizationIdentifier oi)
Definition: ocb-wifi-mac.cc:69
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
void NotifySleepNow(void)
This method is typically invoked by the PhyMacLowListener to notify the MAC layer that the device has...
Definition: mac-low.cc:795
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
VendorSpecificContentManager m_vscManager
VSC manager.
Definition: ocb-wifi-mac.h:180
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
void EnableForWave(Ptr< WaveNetDevice > device)
void NotifyRxDrop(Ptr< const Packet > packet)
Definition: wifi-mac.cc:283
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:162
See IEEE 802.11-2007 chapter 7.3.1.11 and 7.4.5 also IEEE 802.11p-2010 chapter 7.4.5 Although WifiActionHeader has been defined in wifi mgt-header.h/.cc, it is not a good way to inherit from it or add vendor specific action support.
static const Mac48Address WILDCARD_BSSID
Wildcard BSSID.
Definition: ocb-wifi-mac.cc:41
void SetRxCallback(Callback< void, Ptr< Packet >, const WifiMacHeader * > callback)
Definition: mac-low.cc:597
virtual void DeaggregateAmsduAndForward(Ptr< Packet > aggregatedPacket, const WifiMacHeader *hdr)
This method can be called to de-aggregate an A-MSDU and forward the constituent packets up the stack...
void SetLinkDownCallback(Callback< void > linkDown)
bool IsCtl(void) const
Return true if the Type is Control.
bool IsBrandNew(Mac48Address address) const
Return whether the station state is brand new.
Ssid GetSsid(void) const
Video.
Definition: qos-utils.h:45
Voice.
Definition: qos-utils.h:47
Best Effort.
Definition: qos-utils.h:41
bool IsQosAmsdu(void) const
Check if the A-MSDU present bit is set in the QoS control field.
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capability of the device.
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
Receive a packet.
uint8_t QosUtilsGetTidForPacket(Ptr< const Packet > packet)
If a qos tag is attached to the packet, returns a value < 8.
Definition: qos-utils.cc:62
void DeregisterVscCallback(OrganizationIdentifier &oi)
void RecordDisassociated(Mac48Address address)
Records that the STA was disassociated.
virtual void SetLinkUpCallback(Callback< void > linkUp)
SetLinkUpCallback and SetLinkDownCallback will be overloaded In OCB mode, stations can send packets d...
void SetBssid(Mac48Address bssid)
Ptr< EdcaTxopN > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
Background.
Definition: qos-utils.h:43
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
base class for all MAC-level wifi objects.
virtual Ssid GetSsid(void) const
bool m_qosSupported
This Boolean is set true iff this WifiMac is to model 802.11e/WMM style Quality of Service...
void SetAddr1(Mac48Address address)
Fill the Address 1 field with the given address.
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
void SetDsNotTo(void)
Un-set the To DS bit in the Frame Control field.
Ptr< DcaTxop > m_dca
This holds a pointer to the DCF instance for this WifiMac - used for transmission of frames to non-Qo...
Ptr< EdcaTxopN > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
void SetAddr3(Mac48Address address)
Fill the Address 3 field with the given address.
static TypeId GetTypeId(void)
Get the type ID.
Definition: ocb-wifi-mac.cc:44
void SetOrganizationIdentifier(OrganizationIdentifier oi)
the organization identifier is a public organizationally unique identifier assigned by the IEEE...
Ptr< DcaTxop > GetDcaTxop(void) const
Accessor for the DCF object.
virtual void NotifyChannelSwitching(void)
When a channel switching occurs, enqueued packets are removed.
Definition: dca-txop.cc:443
void AddStationHtCapabilities(Mac48Address from, HtCapabilities htcapabilities)
Records HT capabilities of the remote station.
bool m_vhtSupported
This Boolean is set true iff this WifiMac is to model 802.11ac.
void Suspend(void)
To support MAC extension for multiple channel operation, Suspend the activity in current MAC entity...
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
Definition: qos-utils.cc:28
uint8_t GetCategory(void) const
the category field shall be CATEGORY_OF_VSA
void MakeVirtualBusy(Time duration)
static Mac48Address GetBroadcast(void)
Ptr< MacRxMiddle > m_rxMiddle
RX middle (de-fragmentation etc.)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1489
void SetupLow(Ptr< MacLow > low)
Set up listener for MacLow events.
Definition: dcf-manager.cc:155
bool IsMgt(void) const
Return true if the Type is Management.
void NotifySwitchingStartNow(Time duration)
Definition: mac-low.cc:779
Ptr< MacLow > m_low
MacLow (RTS, CTS, DATA, ACK etc.)
HtCapabilities GetHtCapabilities(void) const
Return the HT capability of the device.
void SetQosTid(uint8_t tid)
Set the TID for the QoS header.
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:277
void RemoveReceiveVscCallback(OrganizationIdentifier oi)
Ptr< EdcaTxopN > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
void SetLinkUpCallback(Callback< void > linkUp)
OFDM PHY for the 5 GHz band (Clause 17)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool IsGroup(void) const
void SetAddr2(Mac48Address address)
Fill the Address 2 field with the given address.
an EUI-48 address
Definition: mac48-address.h:43
tuple ssid
Definition: third.py:93
virtual void SetLinkDownCallback(Callback< void > linkDown)
void NotifyMaybeCcaBusyStartNow(Time duration)
Definition: dcf-manager.cc:592
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
bool m_htSupported
This Boolean is set true iff this WifiMac is to model 802.11n.
virtual void SetSsid(Ssid ssid)
VscCallback FindVscCallback(OrganizationIdentifier &oi)
static const uint8_t CATEGORY_OF_VSA
see IEEE 802.11-2007 chapter 7.3.1.11 Table 7-24—Category values
void SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
Ptr< EdcaTxopN > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
bool IsData(void) const
Return true if the Type is DATA.
bool IsQosData(void) const
Return true if the Type is DATA and Subtype is one of the possible values for QoS DATA...
virtual Mac48Address GetBssid(void) const
This method shall not be used in WAVE environment and here it will overloaded to log warn message...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:261
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:269
Mac48Address GetAddress(void) const
void SetTypeData(void)
Set Type/Subtype values for a data packet with no subtype equal to 0.
Total number of ACs.
Definition: qos-utils.h:49
void SetQosNoAmsdu(void)
Set that A-MSDU is not present.
void NotifySleepNow(void)
Notify the DCF that the device has been put in sleep mode.
Definition: dcf-manager.cc:662
virtual void SetBssid(Mac48Address bssid)
void SetNoOrder(void)
Unset order bit in the frame control field.
OrganizationIdentifier GetOrganizationIdentifier(void) const
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to)
Mac48Address GetAddr1(void) const
Return the address in the Address 1 field.
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.)
void SetQosNoEosp()
Un-set the end of service period (EOSP) bit in the QoS control field.
void Reset(void)
To support MAC extension for multiple channel operation, Reset current MAC entity and flush its inter...
void AddAllSupportedModes(Mac48Address address)
Invoked in a STA or AP to store all of the modes supported by a destination which is also supported l...
void NotifySwitchingStartNow(Time duration)
Definition: dcf-manager.cc:602
a unique identifier for an interface.
Definition: type-id.h:58
void Resume(void)
To support MAC extension for multiple channel operation, Resume the activity of suspended MAC entity...
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:914
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
Definition: qos-utils.h:38
void AddReceiveVscCallback(OrganizationIdentifier oi, VscCallback cb)
Definition: ocb-wifi-mac.cc:96
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
void AddStationVhtCapabilities(Mac48Address from, VhtCapabilities vhtcapabilities)
Records VHT capabilities of the remote station.
Implements the IEEE 802.11 MAC header.
Mac48Address GetAddr2(void) const
Return the address in the Address 2 field.
STAs communicate with each directly outside the context of a BSSIn OCB mac mode,synchronization, association, dis-association and authentication of normal wifi are not used for wireless access in vehicular environments.
Definition: ocb-wifi-mac.h:48
void SetDsNotFrom(void)
Un-set the From DS bit in the Frame Control field.
void SetQosAckPolicy(QosAckPolicy policy)
Set the QoS ACK policy in the QoS control field.