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 
23 #include "ns3/event-id.h"
24 #include "ns3/pointer.h"
25 #include "ns3/log.h"
26 #include "ns3/string.h"
27 #include "ns3/mac-rx-middle.h"
28 #include "ns3/ht-capabilities.h"
29 #include "ns3/vht-capabilities.h"
30 #include "wave-mac-low.h"
31 #include "ocb-wifi-mac.h"
32 #include "vendor-specific-action.h"
33 #include "higher-tx-tag.h"
34 
35 namespace ns3 {
36 
37 NS_LOG_COMPONENT_DEFINE ("OcbWifiMac");
38 
39 NS_OBJECT_ENSURE_REGISTERED (OcbWifiMac);
40 
43 
44 TypeId
46 {
47  static TypeId tid = TypeId ("ns3::OcbWifiMac")
49  .SetGroupName ("Wave")
50  .AddConstructor<OcbWifiMac> ()
51  ;
52  return tid;
53 }
54 
56 {
57  NS_LOG_FUNCTION (this);
58  // Let the lower layers know that we are acting as an OCB node
60  // BSSID is still needed in the low part of MAC
62 }
63 
65 {
66  NS_LOG_FUNCTION (this);
67 }
68 
69 void
71 {
72  NS_LOG_FUNCTION (this << vsc << peer << oi);
73  WifiMacHeader hdr;
75  hdr.SetAddr1 (peer);
76  hdr.SetAddr2 (GetAddress ());
78  hdr.SetDsNotFrom ();
79  hdr.SetDsNotTo ();
82  vsc->AddHeader (vsa);
83 
84  if (GetQosSupported ())
85  {
86  uint8_t tid = QosUtilsGetTidForPacket (vsc);
87  tid = tid > 7 ? 0 : tid;
88  m_edca[QosUtilsMapTidToAc (tid)]->Queue (vsc, hdr);
89  }
90  else
91  {
92  m_txop->Queue (vsc, hdr);
93  }
94 }
95 
96 void
98 {
99  NS_LOG_FUNCTION (this << oi << &cb);
101 }
102 
103 void
105 {
106  NS_LOG_FUNCTION (this << oi);
108 }
109 
110 void
112 {
113  NS_LOG_WARN ("in OCB mode we should not call SetSsid");
114 }
115 
116 Ssid
118 {
119  NS_LOG_WARN ("in OCB mode we should not call GetSsid");
120  // we really do not want to return ssid, however we have to provide
121  return RegularWifiMac::GetSsid ();
122 }
123 
124 
125 void
127 {
128  NS_LOG_WARN ("in OCB mode we should not call SetBsid");
129 }
130 
133 {
134  NS_LOG_WARN ("in OCB mode we should not call GetBssid");
135  return WILDCARD_BSSID;
136 }
137 
138 void
140 {
141  NS_LOG_FUNCTION (this << &linkUp);
143 
144  // The approach taken here is that, from the point of view of a STA
145  // in OCB mode, the link is always up, so we immediately invoke the
146  // callback if one is set
147  linkUp ();
148 }
149 
150 void
152 {
153  NS_LOG_FUNCTION (this << &linkDown);
155  NS_LOG_WARN ("in OCB mode the like will never down, so linkDown will never be called");
156 }
157 
158 void
160 {
161  NS_LOG_FUNCTION (this << packet << to);
162  if (m_stationManager->IsBrandNew (to))
163  {
164  //In ad hoc mode, we assume that every destination supports all
165  //the rates we support.
166  if (GetHtSupported () || GetVhtSupported ())
167  {
170  }
171  if (GetVhtSupported ())
172  {
174  }
177  }
178 
179  WifiMacHeader hdr;
180 
181  // If we are not a QoS STA then we definitely want to use AC_BE to
182  // transmit the packet. A TID of zero will map to AC_BE (through \c
183  // QosUtilsMapTidToAc()), so we use that as our default here.
184  uint8_t tid = 0;
185 
186  if (GetQosSupported ())
187  {
190  hdr.SetQosNoEosp ();
191  hdr.SetQosNoAmsdu ();
192  // About transmission of multiple frames,
193  // in Ad-hoc mode TXOP is not supported for now, so TxopLimit=0;
194  // however in OCB mode, 802.11p do not allow transmit multiple frames
195  // so TxopLimit must equal 0
196  hdr.SetQosTxopLimit (0);
197 
198  // Fill in the QoS control field in the MAC header
199  tid = QosUtilsGetTidForPacket (packet);
200  // Any value greater than 7 is invalid and likely indicates that
201  // the packet had no QoS tag, so we revert to zero, which'll
202  // mean that AC_BE is used.
203  if (tid > 7)
204  {
205  tid = 0;
206  }
207  hdr.SetQosTid (tid);
208  }
209  else
210  {
211  hdr.SetType (WIFI_MAC_DATA);
212  }
213 
214  if (GetHtSupported () || GetVhtSupported ())
215  {
216  hdr.SetNoOrder (); // explicitly set to 0 for the time being since HT/VHT/HE control field is not yet implemented (set it to 1 when implemented)
217  }
218  hdr.SetAddr1 (to);
219  hdr.SetAddr2 (GetAddress ());
220  hdr.SetAddr3 (WILDCARD_BSSID);
221  hdr.SetDsNotFrom ();
222  hdr.SetDsNotTo ();
223 
224  if (GetQosSupported ())
225  {
226  // Sanity check that the TID is valid
227  NS_ASSERT (tid < 8);
228  m_edca[QosUtilsMapTidToAc (tid)]->Queue (packet, hdr);
229  }
230  else
231  {
232  m_txop->Queue (packet, hdr);
233  }
234 }
235 
236 /*
237  * see 802.11p-2010 chapter 11.19
238  * here we only care about data packet and vsa management frame
239  */
240 void
242 {
243  NS_LOG_FUNCTION (this << *mpdu);
244  const WifiMacHeader* hdr = &mpdu->GetHeader ();
245  // Create a copy of the MPDU payload because non-const operations like RemovePacketTag
246  // and RemoveHeader may need to be performed.
247  Ptr<Packet> packet = mpdu->GetPacket ()->Copy ();
248  NS_ASSERT (!hdr->IsCtl ());
249  NS_ASSERT (hdr->GetAddr3 () == WILDCARD_BSSID);
250 
251  Mac48Address from = hdr->GetAddr2 ();
252  Mac48Address to = hdr->GetAddr1 ();
253 
254  if (m_stationManager->IsBrandNew (from))
255  {
256  //In ad hoc mode, we assume that every destination supports all
257  //the rates we support.
258  if (GetHtSupported () || GetVhtSupported ())
259  {
262  }
263  if (GetVhtSupported ())
264  {
266  }
269  }
270 
271  if (hdr->IsData ())
272  {
273  if (hdr->IsQosData () && hdr->IsQosAmsdu ())
274  {
275  NS_LOG_DEBUG ("Received A-MSDU from" << from);
277  }
278  else
279  {
280  ForwardUp (packet, from, to);
281  }
282  return;
283  }
284 
285  // why put check here, not before "if (hdr->IsData ())" ?
286  // because WifiNetDevice::ForwardUp needs to m_promiscRx data packet
287  // and will filter data packet for itself
288  // so we need to filter management frame
289  if (to != GetAddress () && !to.IsGroup ())
290  {
291  NS_LOG_LOGIC ("the management frame is not for us");
292  NotifyRxDrop (packet);
293  return;
294  }
295 
296  if (hdr->IsMgt () && hdr->IsAction ())
297  {
298  // yes, we only care about VendorSpecificAction frame in OCB mode
299  // other management frames will be handled by RegularWifiMac::Receive
301  packet->PeekHeader (vsaHdr);
302  if (vsaHdr.GetCategory () == CATEGORY_OF_VSA)
303  {
305  packet->RemoveHeader (vsa);
308 
309  if (cb.IsNull ())
310  {
311  NS_LOG_DEBUG ("cannot find VscCallback for OrganizationIdentifier=" << oi);
312  return;
313  }
314  bool succeed = cb (this, oi,packet, from);
315 
316  if (!succeed)
317  {
318  NS_LOG_DEBUG ("vsc callback could not handle the packet successfully");
319  }
320 
321  return;
322  }
323  }
324  // Invoke the receive handler of our parent class to deal with any
325  // other frames. Specifically, this will handle Block Ack-related
326  // Management Action frames.
327  RegularWifiMac::Receive (Create<WifiMacQueueItem> (packet, *hdr));
328 }
329 
330 void
331 OcbWifiMac::ConfigureEdca (uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
332 {
333  NS_LOG_FUNCTION (this << cwmin << cwmax << aifsn << ac);
334  Ptr<Txop> dcf;
335  switch (ac)
336  {
337  case AC_VO:
339  dcf->SetMinCw ((cwmin + 1) / 4 - 1);
340  dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
341  dcf->SetAifsn (aifsn);
342  break;
343  case AC_VI:
345  dcf->SetMinCw ((cwmin + 1) / 2 - 1);
346  dcf->SetMaxCw (cwmin);
347  dcf->SetAifsn (aifsn);
348  break;
349  case AC_BE:
351  dcf->SetMinCw (cwmin);
352  dcf->SetMaxCw (cwmax);
353  dcf->SetAifsn (aifsn);
354  break;
355  case AC_BK:
357  dcf->SetMinCw (cwmin);
358  dcf->SetMaxCw (cwmax);
359  dcf->SetAifsn (aifsn);
360  break;
361  case AC_BE_NQOS:
362  dcf = RegularWifiMac::GetTxop ();
363  dcf->SetMinCw (cwmin);
364  dcf->SetMaxCw (cwmax);
365  dcf->SetAifsn (aifsn);
366  break;
367  case AC_UNDEF:
368  NS_FATAL_ERROR ("I don't know what to do with this");
369  break;
370  }
371 }
372 
373 void
375 {
376  NS_LOG_FUNCTION (this << standard);
378  || (standard == WIFI_PHY_STANDARD_80211a));
379 
380  uint32_t cwmin = 15;
381  uint32_t cwmax = 1023;
382 
383  // The special value of AC_BE_NQOS which exists in the Access
384  // Category enumeration allows us to configure plain old DCF.
385  ConfigureEdca (cwmin, cwmax, 2, AC_BE_NQOS);
386 
387  // Now we configure the EDCA functions
388  // see IEEE802.11p-2010 section 7.3.2.29
389  // Wave CCH and SCHs set default 802.11p EDCA
390  ConfigureEdca (cwmin, cwmax, 2, AC_VO);
391  ConfigureEdca (cwmin, cwmax, 3, AC_VI);
392  ConfigureEdca (cwmin, cwmax, 6, AC_BE);
393  ConfigureEdca (cwmin, cwmax, 9, AC_BK);
394 }
395 
396 
397 void
399 {
400  NS_LOG_FUNCTION (this);
402  m_low->NotifySleepNow ();
403 }
404 
405 void
407 {
408  NS_LOG_FUNCTION (this);
409  // wake-up operation is not required in m_low object
411 }
412 
413 void
415 {
416  NS_LOG_FUNCTION (this << duration);
418 }
419 
420 void
422 {
423  NS_LOG_FUNCTION (this << ac);
424  Ptr<QosTxop> queue = m_edca.find (ac)->second;
425  NS_ASSERT (queue != 0);
426  // reset and flush queue
427  queue->NotifyChannelSwitching ();
428 }
429 
430 void
432 {
433  NS_LOG_FUNCTION (this);
434  // The switching event is used to notify MAC entity reset its operation.
436  m_low->NotifySwitchingStartNow (Time (0));
437 }
438 
439 void
441 {
442  NS_LOG_FUNCTION (this << device);
443  // To extend current OcbWifiMac for WAVE 1609.4, we shall use WaveMacLow instead of MacLow
444  m_low = CreateObject<WaveMacLow> ();
445  (DynamicCast<WaveMacLow> (m_low))->SetWaveNetDevice (device);
446  m_low->SetRxCallback (MakeCallback (&MacRxMiddle::Receive, m_rxMiddle));
449  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
450  {
451  i->second->SetMacLow (m_low);
452  i->second->CompleteConfig ();
453  }
454 }
455 } // namespace ns3
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
virtual Ssid GetSsid(void) const
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:1273
void RegisterVscCallback(OrganizationIdentifier oi, VscCallback cb)
Ptr< Txop > m_txop
This holds a pointer to the TXOP instance for this WifiMac - used for transmission of frames to non-Q...
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)
#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...
bool IsCtl(void) const
Return true if the Type is Control.
virtual void DeaggregateAmsduAndForward(Ptr< WifiMacQueueItem > mpdu)
This method can be called to de-aggregate an A-MSDU and forward the constituent packets up the stack...
bool GetQosSupported() const
Return whether the device supports QoS.
virtual ~OcbWifiMac(void)
Definition: ocb-wifi-mac.cc:64
virtual void Enqueue(Ptr< Packet > packet, Mac48Address to)
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
void AddStationVhtCapabilities(Mac48Address from, VhtCapabilities vhtCapabilities)
Records VHT capabilities of the remote station.
Mac48Address GetAddr1(void) const
Return the address in the Address 1 field.
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:70
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
void NotifyMaybeCcaBusyStartNow(Time duration)
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
virtual Mac48Address GetBssid(void) const
This method shall not be used in WAVE environment and here it will overloaded to log warn message...
VendorSpecificContentManager m_vscManager
VSC manager.
Definition: ocb-wifi-mac.h:181
void EnableForWave(Ptr< WaveNetDevice > device)
void NotifyRxDrop(Ptr< const Packet > packet)
Definition: wifi-mac.cc:264
#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:42
void SetLinkDownCallback(Callback< void > linkDown)
Ptr< ChannelAccessManager > m_channelAccessManager
channel access manager
Video.
Definition: qos-utils.h:45
Voice.
Definition: qos-utils.h:47
Best Effort.
Definition: qos-utils.h:41
virtual void Receive(Ptr< WifiMacQueueItem > mpdu)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
uint8_t QosUtilsGetTidForPacket(Ptr< const Packet > packet)
If a QoS tag is attached to the packet, returns a value < 8.
Definition: qos-utils.cc:58
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)
uint8_t GetCategory(void) const
the category field shall be CATEGORY_OF_VSA
Background.
Definition: qos-utils.h:43
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
bool IsAction(void) const
Return true if the header is an Action header.
base class for all MAC-level wifi objects.
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.
bool IsQosAmsdu(void) const
Check if the A-MSDU present bit is set in the QoS control field.
void SetAddr3(Mac48Address address)
Fill the Address 3 field with the given address.
bool GetVhtSupported() const
Return whether the device supports VHT.
static TypeId GetTypeId(void)
Get the type ID.
Definition: ocb-wifi-mac.cc:45
void SetOrganizationIdentifier(OrganizationIdentifier oi)
the organization identifier is a public organizationally unique identifier assigned by the IEEE...
void AddStationHtCapabilities(Mac48Address from, HtCapabilities htCapabilities)
Records HT capabilities of the remote station.
ssid
Definition: third.py:100
Mac48Address GetAddr3(void) const
Return the address in the Address 3 field.
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:32
void MakeVirtualBusy(Time duration)
static Mac48Address GetBroadcast(void)
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:290
Ptr< MacRxMiddle > m_rxMiddle
RX middle (defragmentation etc.)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1610
Ptr< QosTxop > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
void NotifySleepNow(void)
Notify the DCF that the device has been put in sleep mode.
Ptr< MacLow > m_low
MacLow (RTS, CTS, Data, Ack etc.)
Mac48Address GetAddr2(void) const
Return the address in the Address 2 field.
void SetQosTid(uint8_t tid)
Set the TID for the QoS header.
void RemoveReceiveVscCallback(OrganizationIdentifier oi)
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 IsData(void) const
Return true if the Type is DATA.
void SetAddr2(Mac48Address address)
Fill the Address 2 field with the given address.
an EUI-48 address
Definition: mac48-address.h:43
void SetMacLow(const Ptr< MacLow > low)
Set MacLow associated with this Txop.
Definition: txop.cc:133
Ssid GetSsid(void) const
Ptr< QosTxop > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
virtual void NotifyChannelSwitching(void)
When a channel switching occurs, enqueued packets are removed.
Definition: txop.cc:574
virtual void SetLinkDownCallback(Callback< void > linkDown)
bool IsGroup(void) const
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
Mac48Address GetAddress(void) const
virtual void SetSsid(Ssid ssid)
void SetType(WifiMacType type, bool resetToDsFromDs=true)
Set Type/Subtype values with the correct values depending on the given type.
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
Ptr< QosTxop > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
Ptr< Txop > GetTxop(void) const
Accessor for the DCF object.
void SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
bool IsMgt(void) const
Return true if the Type is Management.
OrganizationIdentifier GetOrganizationIdentifier(void) const
void SetMinCw(uint32_t minCw)
Set the minimum contention window size.
Definition: txop.cc:185
void SetMaxCw(uint32_t maxCw)
Set the maximum contention window size.
Definition: txop.cc:198
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:265
bool GetHtSupported() const
Return whether the device supports HT.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
Total number of ACs.
Definition: qos-utils.h:49
void SetQosNoAmsdu(void)
Set that A-MSDU is not present.
virtual void Receive(Ptr< WifiMacQueueItem > mpdu)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
void NotifySwitchingStartNow(Time duration)
virtual void SetBssid(Mac48Address bssid)
void ForwardUp(Ptr< const Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
void SetNoOrder(void)
Unset order bit in the frame control field.
bool IsQosData(void) const
Return true if the Type is DATA and Subtype is one of the possible values for QoS Data...
void SetAifsn(uint8_t aifsn)
Set the number of slots that make up an AIFS.
Definition: txop.cc:269
Ptr< QosTxop > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
void Receive(Ptr< WifiMacQueueItem > mpdu)
Receive a packet.
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.
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1372
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...
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capabilities of the device.
void SetupLow(Ptr< MacLow > low)
Set up listener for MacLow events.
virtual void Queue(Ptr< Packet > packet, const WifiMacHeader &hdr)
Definition: txop.cc:316
bool IsBrandNew(Mac48Address address) const
Return whether the station state is brand new.
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:922
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:97
void NotifyWakeupNow(void)
Notify the DCF that the device has been resumed from sleep mode.
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
Implements the IEEE 802.11 MAC header.
HtCapabilities GetHtCapabilities(void) const
Return the HT capabilities of the device.
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:49
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.