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 "ns3/channel-access-manager.h"
32 #include "ocb-wifi-mac.h"
33 #include "vendor-specific-action.h"
34 #include "higher-tx-tag.h"
35 
36 namespace ns3 {
37 
38 NS_LOG_COMPONENT_DEFINE ("OcbWifiMac");
39 
40 NS_OBJECT_ENSURE_REGISTERED (OcbWifiMac);
41 
44 
45 TypeId
47 {
48  static TypeId tid = TypeId ("ns3::OcbWifiMac")
49  .SetParent<WifiMac> ()
50  .SetGroupName ("Wave")
51  .AddConstructor<OcbWifiMac> ()
52  ;
53  return tid;
54 }
55 
57 {
58  NS_LOG_FUNCTION (this);
59  // Let the lower layers know that we are acting as an OCB node
61  // BSSID is still needed in the low part of MAC
63 }
64 
66 {
67  NS_LOG_FUNCTION (this);
68 }
69 
70 void
72 {
73  NS_LOG_FUNCTION (this << vsc << peer << oi);
74  WifiMacHeader hdr;
76  hdr.SetAddr1 (peer);
77  hdr.SetAddr2 (GetAddress ());
79  hdr.SetDsNotFrom ();
80  hdr.SetDsNotTo ();
83  vsc->AddHeader (vsa);
84 
85  if (GetQosSupported ())
86  {
87  uint8_t tid = QosUtilsGetTidForPacket (vsc);
88  tid = tid > 7 ? 0 : tid;
89  GetQosTxop (tid)->Queue (vsc, hdr);
90  }
91  else
92  {
93  GetTxop ()->Queue (vsc, hdr);
94  }
95 }
96 
97 void
99 {
100  NS_LOG_FUNCTION (this << oi << &cb);
102 }
103 
104 void
106 {
107  NS_LOG_FUNCTION (this << oi);
109 }
110 
111 void
113 {
114  NS_LOG_WARN ("in OCB mode we should not call SetSsid");
115 }
116 
117 Ssid
119 {
120  NS_LOG_WARN ("in OCB mode we should not call GetSsid");
121  // we really do not want to return ssid, however we have to provide
122  return WifiMac::GetSsid ();
123 }
124 
125 
126 void
128 {
129  NS_LOG_WARN ("in OCB mode we should not call SetBsid");
130 }
131 
134 {
135  NS_LOG_WARN ("in OCB mode we should not call GetBssid");
136  return WILDCARD_BSSID;
137 }
138 
139 void
141 {
142  NS_LOG_FUNCTION (this << &linkUp);
144 
145  // The approach taken here is that, from the point of view of a STA
146  // in OCB mode, the link is always up, so we immediately invoke the
147  // callback if one is set
148  linkUp ();
149 }
150 
151 void
153 {
154  NS_LOG_FUNCTION (this << &linkDown);
155  WifiMac::SetLinkDownCallback (linkDown);
156  NS_LOG_WARN ("in OCB mode the like will never down, so linkDown will never be called");
157 }
158 
159 bool
161 {
162  return true;
163 }
164 
165 void
167 {
168  NS_LOG_FUNCTION (this << packet << to);
169  if (GetWifiRemoteStationManager ()->IsBrandNew (to))
170  {
171  //In ad hoc mode, we assume that every destination supports all
172  //the rates we support.
173  if (GetHtSupported () || GetVhtSupported ())
174  {
177  }
178  if (GetVhtSupported ())
179  {
181  }
184  }
185 
186  WifiMacHeader hdr;
187 
188  // If we are not a QoS STA then we definitely want to use AC_BE to
189  // transmit the packet. A TID of zero will map to AC_BE (through \c
190  // QosUtilsMapTidToAc()), so we use that as our default here.
191  uint8_t tid = 0;
192 
193  if (GetQosSupported ())
194  {
197  hdr.SetQosNoEosp ();
198  hdr.SetQosNoAmsdu ();
199  // About transmission of multiple frames,
200  // in Ad-hoc mode TXOP is not supported for now, so TxopLimit=0;
201  // however in OCB mode, 802.11p do not allow transmit multiple frames
202  // so TxopLimit must equal 0
203  hdr.SetQosTxopLimit (0);
204 
205  // Fill in the QoS control field in the MAC header
206  tid = QosUtilsGetTidForPacket (packet);
207  // Any value greater than 7 is invalid and likely indicates that
208  // the packet had no QoS tag, so we revert to zero, which'll
209  // mean that AC_BE is used.
210  if (tid > 7)
211  {
212  tid = 0;
213  }
214  hdr.SetQosTid (tid);
215  }
216  else
217  {
218  hdr.SetType (WIFI_MAC_DATA);
219  }
220 
221  if (GetHtSupported () || GetVhtSupported ())
222  {
223  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)
224  }
225  hdr.SetAddr1 (to);
226  hdr.SetAddr2 (GetAddress ());
227  hdr.SetAddr3 (WILDCARD_BSSID);
228  hdr.SetDsNotFrom ();
229  hdr.SetDsNotTo ();
230 
231  if (GetQosSupported ())
232  {
233  // Sanity check that the TID is valid
234  NS_ASSERT (tid < 8);
235  GetQosTxop (tid)->Queue (packet, hdr);
236  }
237  else
238  {
239  GetTxop ()->Queue (packet, hdr);
240  }
241 }
242 
243 /*
244  * see 802.11p-2010 chapter 11.19
245  * here we only care about data packet and vsa management frame
246  */
247 void
249 {
250  NS_LOG_FUNCTION (this << *mpdu);
251  const WifiMacHeader* hdr = &mpdu->GetHeader ();
252  // Create a copy of the MPDU payload because non-const operations like RemovePacketTag
253  // and RemoveHeader may need to be performed.
254  Ptr<Packet> packet = mpdu->GetPacket ()->Copy ();
255  NS_ASSERT (!hdr->IsCtl ());
256  NS_ASSERT (hdr->GetAddr3 () == WILDCARD_BSSID);
257 
258  Mac48Address from = hdr->GetAddr2 ();
259  Mac48Address to = hdr->GetAddr1 ();
260 
261  if (GetWifiRemoteStationManager ()->IsBrandNew (from))
262  {
263  //In ad hoc mode, we assume that every destination supports all
264  //the rates we support.
265  if (GetHtSupported () || GetVhtSupported ())
266  {
269  }
270  if (GetVhtSupported ())
271  {
273  }
276  }
277 
278  if (hdr->IsData ())
279  {
280  if (hdr->IsQosData () && hdr->IsQosAmsdu ())
281  {
282  NS_LOG_DEBUG ("Received A-MSDU from" << from);
284  }
285  else
286  {
287  ForwardUp (packet, from, to);
288  }
289  return;
290  }
291 
292  // why put check here, not before "if (hdr->IsData ())" ?
293  // because WifiNetDevice::ForwardUp needs to m_promiscRx data packet
294  // and will filter data packet for itself
295  // so we need to filter management frame
296  if (to != GetAddress () && !to.IsGroup ())
297  {
298  NS_LOG_LOGIC ("the management frame is not for us");
299  NotifyRxDrop (packet);
300  return;
301  }
302 
303  if (hdr->IsMgt () && hdr->IsAction ())
304  {
305  // yes, we only care about VendorSpecificAction frame in OCB mode
306  // other management frames will be handled by WifiMac::Receive
308  packet->PeekHeader (vsaHdr);
309  if (vsaHdr.GetCategory () == CATEGORY_OF_VSA)
310  {
312  packet->RemoveHeader (vsa);
315 
316  if (cb.IsNull ())
317  {
318  NS_LOG_DEBUG ("cannot find VscCallback for OrganizationIdentifier=" << oi);
319  return;
320  }
321  bool succeed = cb (this, oi,packet, from);
322 
323  if (!succeed)
324  {
325  NS_LOG_DEBUG ("vsc callback could not handle the packet successfully");
326  }
327 
328  return;
329  }
330  }
331  // Invoke the receive handler of our parent class to deal with any
332  // other frames. Specifically, this will handle Block Ack-related
333  // Management Action frames.
334  WifiMac::Receive (Create<WifiMacQueueItem> (packet, *hdr));
335 }
336 
337 void
338 OcbWifiMac::ConfigureEdca (uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
339 {
340  NS_LOG_FUNCTION (this << cwmin << cwmax << aifsn << ac);
341  Ptr<Txop> dcf;
342  switch (ac)
343  {
344  case AC_VO:
345  dcf = WifiMac::GetVOQueue ();
346  dcf->SetMinCw ((cwmin + 1) / 4 - 1);
347  dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
348  dcf->SetAifsn (aifsn);
349  break;
350  case AC_VI:
351  dcf = WifiMac::GetVIQueue ();
352  dcf->SetMinCw ((cwmin + 1) / 2 - 1);
353  dcf->SetMaxCw (cwmin);
354  dcf->SetAifsn (aifsn);
355  break;
356  case AC_BE:
357  dcf = WifiMac::GetBEQueue ();
358  dcf->SetMinCw (cwmin);
359  dcf->SetMaxCw (cwmax);
360  dcf->SetAifsn (aifsn);
361  break;
362  case AC_BK:
363  dcf = WifiMac::GetBKQueue ();
364  dcf->SetMinCw (cwmin);
365  dcf->SetMaxCw (cwmax);
366  dcf->SetAifsn (aifsn);
367  break;
368  case AC_BE_NQOS:
369  dcf = WifiMac::GetTxop ();
370  dcf->SetMinCw (cwmin);
371  dcf->SetMaxCw (cwmax);
372  dcf->SetAifsn (aifsn);
373  break;
374  case AC_BEACON:
375  // done by ApWifiMac
376  break;
377  case AC_UNDEF:
378  NS_FATAL_ERROR ("I don't know what to do with this");
379  break;
380  }
381 }
382 
383 void
385 {
386  NS_LOG_FUNCTION (this << standard);
387  NS_ASSERT (standard == WIFI_STANDARD_80211p);
388 
389  uint32_t cwmin = 15;
390  uint32_t cwmax = 1023;
391 
392  if (!GetQosSupported ())
393  {
394  // The special value of AC_BE_NQOS which exists in the Access
395  // Category enumeration allows us to configure plain old DCF.
396  ConfigureEdca (cwmin, cwmax, 2, AC_BE_NQOS);
397  }
398  else
399  {
400  // Now we configure the EDCA functions
401  // see IEEE802.11p-2010 section 7.3.2.29
402  // Wave CCH and SCHs set default 802.11p EDCA
403  ConfigureEdca (cwmin, cwmax, 2, AC_VO);
404  ConfigureEdca (cwmin, cwmax, 3, AC_VI);
405  ConfigureEdca (cwmin, cwmax, 6, AC_BE);
406  ConfigureEdca (cwmin, cwmax, 9, AC_BK);
407  }
408 
409  // Setup FrameExchangeManager
410  m_feManager = CreateObject<WaveFrameExchangeManager> ();
411  m_feManager->SetWifiMac (this);
412  m_feManager->SetMacTxMiddle (m_txMiddle);
413  m_feManager->SetMacRxMiddle (m_rxMiddle);
414  m_feManager->SetAddress (GetAddress ());
415  m_channelAccessManager->SetupFrameExchangeManager (m_feManager);
416  if (GetQosSupported ())
417  {
418  for (auto& ac : {AC_BE, AC_BK, AC_VI, AC_VO})
419  {
420  GetQosTxop (ac)->SetQosFrameExchangeManager (DynamicCast<QosFrameExchangeManager> (m_feManager));
421  }
422  }
423 }
424 
425 
426 void
428 {
429  NS_LOG_FUNCTION (this);
430  m_channelAccessManager->NotifySleepNow ();
431  m_feManager->NotifySleepNow ();
432 }
433 
434 void
436 {
437  NS_LOG_FUNCTION (this);
438  // wake-up operation is not required in m_low object
439  m_channelAccessManager->NotifyWakeupNow ();
440 }
441 
442 void
444 {
445  NS_LOG_FUNCTION (this << duration);
446  m_channelAccessManager->NotifyMaybeCcaBusyStartNow (duration);
447 }
448 
449 void
451 {
452  NS_LOG_FUNCTION (this << ac);
453  Ptr<QosTxop> queue = GetQosTxop (ac);
454  NS_ASSERT (queue != 0);
455  // reset and flush queue
456  queue->GetWifiMacQueue ()->Flush ();
457 }
458 
459 void
461 {
462  NS_LOG_FUNCTION (this);
463  // The switching event is used to notify MAC entity reset its operation.
464  m_channelAccessManager->NotifySwitchingStartNow (Time (0));
465  m_feManager->NotifySwitchingStartNow (Time (0));
466 }
467 
468 void
470 {
471  NS_LOG_FUNCTION (this << device);
472  // To extend current OcbWifiMac for WAVE 1609.4, we shall use WaveFrameExchangeManager
473  StaticCast<WaveFrameExchangeManager> (m_feManager)->SetWaveNetDevice (device);
474 }
475 
476 void
478 {
479  NS_LOG_FUNCTION (this);
481 }
482 
483 } // namespace ns3
Callback template class.
Definition: callback.h:1279
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1386
an EUI-48 address
Definition: mac48-address.h:44
static Mac48Address GetBroadcast(void)
bool IsGroup(void) const
STAs communicate with each directly outside the context of a BSS.
Definition: ocb-wifi-mac.h:50
virtual Ssid GetSsid(void) const
static TypeId GetTypeId(void)
Get the type ID.
Definition: ocb-wifi-mac.cc:46
virtual void SetBssid(Mac48Address bssid)
void CancleTx(enum AcIndex ac)
virtual void SetLinkUpCallback(Callback< void > linkUp)
SetLinkUpCallback and SetLinkDownCallback will be overloaded In OCB mode, stations can send packets d...
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...
VendorSpecificContentManager m_vscManager
VSC manager.
Definition: ocb-wifi-mac.h:185
virtual ~OcbWifiMac(void)
Definition: ocb-wifi-mac.cc:65
void AddReceiveVscCallback(OrganizationIdentifier oi, VscCallback cb)
Definition: ocb-wifi-mac.cc:98
virtual void SetSsid(Ssid ssid)
void EnableForWave(Ptr< WaveNetDevice > device)
void SendVsc(Ptr< Packet > vsc, Mac48Address peer, OrganizationIdentifier oi)
Definition: ocb-wifi-mac.cc:71
virtual void Enqueue(Ptr< Packet > packet, Mac48Address to)
virtual void SetLinkDownCallback(Callback< void > linkDown)
void Suspend(void)
To support MAC extension for multiple channel operation, Suspend the activity in current MAC entity.
virtual Mac48Address GetBssid(void) const
This method shall not be used in WAVE environment and here it will overloaded to log warn message.
virtual void DoDispose(void)
Destructor implementation.
void MakeVirtualBusy(Time duration)
void ConfigureEdca(uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
void RemoveReceiveVscCallback(OrganizationIdentifier oi)
virtual bool CanForwardPacketsTo(Mac48Address to) const
Return true if packets can be forwarded to the given destination, false otherwise.
void Resume(void)
To support MAC extension for multiple channel operation, Resume the activity of suspended MAC entity.
virtual void ConfigureStandard(enum WifiStandard standard)
void Reset(void)
To support MAC extension for multiple channel operation, Reset current MAC entity and flush its inter...
the organization identifier is a public organizationally unique identifier assigned by the IEEE.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:290
void SetQosFrameExchangeManager(const Ptr< QosFrameExchangeManager > qosFem)
Set the Frame Exchange Manager associated with this QoS STA.
Definition: qos-txop.cc:143
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:36
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
void SetMaxCw(uint32_t maxCw)
Set the maximum contention window size.
Definition: txop.cc:173
Ptr< WifiMacQueue > GetWifiMacQueue() const
Return the packet queue associated with this Txop.
Definition: txop.cc:154
void SetAifsn(uint8_t aifsn)
Set the number of slots that make up an AIFS.
Definition: txop.cc:247
void SetMinCw(uint32_t minCw)
Set the minimum contention window size.
Definition: txop.cc:161
virtual void Queue(Ptr< Packet > packet, const WifiMacHeader &hdr)
Definition: txop.cc:294
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
See IEEE 802.11-2007 chapter 7.3.1.11 and 7.4.5 also IEEE 802.11p-2010 chapter 7.4....
uint8_t GetCategory(void) const
Get the category field.
void SetOrganizationIdentifier(OrganizationIdentifier oi)
OrganizationIdentifier GetOrganizationIdentifier(void) const
void RegisterVscCallback(OrganizationIdentifier oi, VscCallback cb)
VscCallback FindVscCallback(OrganizationIdentifier &oi)
void DeregisterVscCallback(OrganizationIdentifier &oi)
Implements the IEEE 802.11 MAC header.
void SetDsNotFrom(void)
Un-set the From DS bit in the Frame Control field.
Mac48Address GetAddr3(void) const
Return the address in the Address 3 field.
bool IsCtl(void) const
Return true if the Type is Control.
void SetQosAckPolicy(QosAckPolicy policy)
Set the QoS Ack policy in the QoS 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 SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
Mac48Address GetAddr2(void) const
Return the address in the Address 2 field.
void SetAddr1(Mac48Address address)
Fill the Address 1 field with the given address.
void SetType(WifiMacType type, bool resetToDsFromDs=true)
Set Type/Subtype values with the correct values depending on the given type.
void SetQosTid(uint8_t tid)
Set the TID for the QoS header.
void SetQosNoEosp()
Un-set the end of service period (EOSP) bit in the QoS control field.
bool IsAction(void) const
Return true if the header is an Action header.
void SetDsNotTo(void)
Un-set the To DS bit in the Frame Control field.
bool IsMgt(void) const
Return true if the Type is Management.
Mac48Address GetAddr1(void) const
Return the address in the Address 1 field.
void SetNoOrder(void)
Unset order bit in the frame control field.
void SetQosNoAmsdu(void)
Set that A-MSDU is not present.
void SetAddr2(Mac48Address address)
Fill the Address 2 field with the given address.
bool IsData(void) const
Return true if the Type is DATA.
void SetAddr3(Mac48Address address)
Fill the Address 3 field with the given address.
bool IsQosAmsdu(void) const
Check if the A-MSDU present bit is set in the QoS control field.
base class for all MAC-level wifi objects.
Definition: wifi-mac.h:85
Ptr< QosTxop > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
Definition: wifi-mac.cc:491
bool GetVhtSupported() const
Return whether the device supports VHT.
Definition: wifi-mac.cc:1075
bool GetQosSupported() const
Return whether the device supports QoS.
Definition: wifi-mac.cc:822
Ssid GetSsid(void) const
Definition: wifi-mac.cc:416
Ptr< MacRxMiddle > m_rxMiddle
RX middle (defragmentation etc.)
Definition: wifi-mac.h:519
Mac48Address GetAddress(void) const
Definition: wifi-mac.cc:403
Ptr< QosTxop > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
Definition: wifi-mac.cc:485
bool GetHtSupported() const
Return whether the device supports HT.
Definition: wifi-mac.cc:1065
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
Definition: wifi-mac.cc:371
Ptr< WifiRemoteStationManager > GetWifiRemoteStationManager(void) const
Definition: wifi-mac.cc:757
Ptr< QosTxop > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
Definition: wifi-mac.cc:473
Ptr< ChannelAccessManager > m_channelAccessManager
channel access manager
Definition: wifi-mac.h:521
Ptr< QosTxop > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
Definition: wifi-mac.cc:479
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...
Definition: wifi-mac.cc:923
Ptr< MacTxMiddle > m_txMiddle
TX middle (aggregation etc.)
Definition: wifi-mac.h:520
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.
Definition: wifi-mac.cc:1036
Ptr< FrameExchangeManager > m_feManager
Frame Exchange Manager.
Definition: wifi-mac.h:522
void SetLinkDownCallback(Callback< void > linkDown)
Definition: wifi-mac.cc:898
void NotifyRxDrop(Ptr< const Packet > packet)
Definition: wifi-mac.cc:543
virtual void SetLinkUpCallback(Callback< void > linkUp)
Definition: wifi-mac.cc:891
void ForwardUp(Ptr< const Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
Definition: wifi-mac.cc:916
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capabilities of the device.
Definition: wifi-mac.cc:1242
HtCapabilities GetHtCapabilities(void) const
Return the HT capabilities of the device.
Definition: wifi-mac.cc:1186
Ptr< QosTxop > GetQosTxop(AcIndex ac) const
Accessor for a specified EDCA object.
Definition: wifi-mac.cc:452
void DoDispose() override
Destructor implementation.
Definition: wifi-mac.cc:336
void SetBssid(Mac48Address bssid)
Definition: wifi-mac.cc:422
Ptr< Txop > GetTxop(void) const
Accessor for the Txop object.
Definition: wifi-mac.cc:446
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...
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 AddStationVhtCapabilities(Mac48Address from, VhtCapabilities vhtCapabilities)
Records VHT capabilities of the remote station.
void RecordDisassociated(Mac48Address address)
Records that the STA was disassociated.
void AddStationHtCapabilities(Mac48Address from, HtCapabilities htCapabilities)
Records HT capabilities of the remote station.
#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
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:289
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:265
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
uint8_t QosUtilsGetTidForPacket(Ptr< const Packet > packet)
If a QoS tag is attached to the packet, returns a value < 8.
Definition: qos-utils.cc:152
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
Definition: qos-utils.h:71
@ WIFI_STANDARD_80211p
@ AC_BE_NQOS
Non-QoS.
Definition: qos-utils.h:81
@ AC_BE
Best Effort.
Definition: qos-utils.h:73
@ AC_VO
Voice.
Definition: qos-utils.h:79
@ AC_VI
Video.
Definition: qos-utils.h:77
@ AC_BK
Background.
Definition: qos-utils.h:75
@ AC_UNDEF
Total number of ACs.
Definition: qos-utils.h:85
@ AC_BEACON
Beacon queue.
Definition: qos-utils.h:83
Every class exported by the ns3 library is enclosed in the ns3 namespace.
@ OCB
Definition: wifi-mac.h:57
@ WIFI_MAC_MGT_ACTION
@ WIFI_MAC_DATA
@ WIFI_MAC_QOSDATA
static const Mac48Address WILDCARD_BSSID
Wildcard BSSID.
Definition: ocb-wifi-mac.cc:43
static const uint8_t CATEGORY_OF_VSA
see IEEE 802.11-2007 chapter 7.3.1.11 Table 7-24—Category values
ssid
Definition: third.py:100