wifi: add missing files in previous commit
This commit is contained in:
430
src/wifi/model/extended-capabilities.cc
Normal file
430
src/wifi/model/extended-capabilities.cc
Normal file
@@ -0,0 +1,430 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2017
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
|
||||
*/
|
||||
|
||||
#include "extended-capabilities.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
ExtendedCapabilities::ExtendedCapabilities ()
|
||||
: m_20_40_bssCoexistenceManagementSupport (0),
|
||||
m_extendedChannelSwitching (0),
|
||||
m_psmpCapability (0),
|
||||
m_spsmpSupport (0),
|
||||
m_event (0),
|
||||
m_diagnostics (0),
|
||||
m_multicastDiagnostics (0),
|
||||
m_locationTracking (0),
|
||||
m_fms (0),
|
||||
m_proxyArpService (0),
|
||||
m_collocatedInterferenceReporting (0),
|
||||
m_civicLocation (0),
|
||||
m_geospatialLocation (0),
|
||||
m_tfs (0),
|
||||
m_wnmSleepMode (0),
|
||||
m_timBroadcast (0),
|
||||
m_bssTransition (0),
|
||||
m_qosTrafficCapability (0),
|
||||
m_acStationCount (0),
|
||||
m_multipleBssid (0),
|
||||
m_timingMeasurement (0),
|
||||
m_channelUsage (0),
|
||||
m_ssidList (0),
|
||||
m_dms (0),
|
||||
m_utcTsfOffset (0),
|
||||
m_tpuBufferStaSupport (0),
|
||||
m_tdlsPeerPsmSupport (0),
|
||||
m_tdlsChannelSwitching (0),
|
||||
m_interworking (0),
|
||||
m_qosMap (0),
|
||||
m_ebr (0),
|
||||
m_sspnInterface (0),
|
||||
m_msgcfCapability (0),
|
||||
m_tdlsSupport (0),
|
||||
m_tdlsProhibited (0),
|
||||
m_tdlsChannelSwitchingProhibited (0),
|
||||
m_rejectUnadmittedFrame (0),
|
||||
m_serviceIntervalGranularity (0),
|
||||
m_identifierLocation (0),
|
||||
m_uapsdCoexistence (0),
|
||||
m_wnmNotification (0),
|
||||
m_qabCapability (0),
|
||||
m_utf8Ssid (0),
|
||||
m_qmfActivated (0),
|
||||
m_qmfReconfigurationActivated (0),
|
||||
m_robustAvStreaming (0),
|
||||
m_advancedGcr (0),
|
||||
m_meshGcr (0),
|
||||
m_scs (0),
|
||||
m_qloadReport (0),
|
||||
m_alternateEdca (0),
|
||||
m_unprotectedTxopNegotiation (0),
|
||||
m_protectedTxopNegotiation (0),
|
||||
m_protectedQloadReport (0),
|
||||
m_tdlsWiderBandwidth (0),
|
||||
m_operatingModeNotification (0),
|
||||
m_maxNumberOfMsdusInAmsdu (0),
|
||||
m_htSupported (0),
|
||||
m_vhtSupported (0)
|
||||
{
|
||||
}
|
||||
|
||||
WifiInformationElementId
|
||||
ExtendedCapabilities::ElementId () const
|
||||
{
|
||||
return IE_EXTENDED_CAPABILITIES;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetHtSupported (uint8_t htSupported)
|
||||
{
|
||||
m_htSupported = htSupported;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetVhtSupported (uint8_t vhtSupported)
|
||||
{
|
||||
m_vhtSupported = vhtSupported;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetInformationFieldSize () const
|
||||
{
|
||||
//we should not be here if it is not supported
|
||||
NS_ASSERT (m_htSupported > 0 || m_vhtSupported > 0);
|
||||
if (!m_vhtSupported)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 8;
|
||||
}
|
||||
|
||||
Buffer::Iterator
|
||||
ExtendedCapabilities::Serialize (Buffer::Iterator i) const
|
||||
{
|
||||
if (m_htSupported < 1 && m_vhtSupported < 1)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
return WifiInformationElement::Serialize (i);
|
||||
}
|
||||
|
||||
uint16_t
|
||||
ExtendedCapabilities::GetSerializedSize () const
|
||||
{
|
||||
if (m_htSupported < 1 && m_vhtSupported < 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return WifiInformationElement::GetSerializedSize ();
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte1 (uint8_t ctrl)
|
||||
{
|
||||
m_20_40_bssCoexistenceManagementSupport = ctrl & 0x01;
|
||||
m_extendedChannelSwitching = (ctrl >> 2) & 0x01;
|
||||
m_psmpCapability = (ctrl >> 4) & 0x01;
|
||||
m_spsmpSupport = (ctrl >> 6) & 0x01;
|
||||
m_event = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte1 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_20_40_bssCoexistenceManagementSupport & 0x01;
|
||||
val |= (m_extendedChannelSwitching & 0x01) << 2;
|
||||
val |= (m_psmpCapability & 0x01) << 4;
|
||||
val |= (m_spsmpSupport & 0x01) << 6;
|
||||
val |= (m_event & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte2 (uint8_t ctrl)
|
||||
{
|
||||
m_diagnostics = ctrl & 0x01;
|
||||
m_multicastDiagnostics = (ctrl >> 1) & 0x01;
|
||||
m_locationTracking = (ctrl >> 2) & 0x01;
|
||||
m_fms = (ctrl >> 3) & 0x01;
|
||||
m_proxyArpService = (ctrl >> 4) & 0x01;
|
||||
m_collocatedInterferenceReporting = (ctrl >> 5) & 0x01;
|
||||
m_civicLocation = (ctrl >> 6) & 0x01;
|
||||
m_geospatialLocation = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte2 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_diagnostics & 0x01;
|
||||
val |= (m_multicastDiagnostics & 0x01) << 1;
|
||||
val |= (m_locationTracking & 0x01) << 2;
|
||||
val |= (m_fms & 0x01) << 3;
|
||||
val |= (m_proxyArpService & 0x01) << 4;
|
||||
val |= (m_collocatedInterferenceReporting & 0x01) << 5;
|
||||
val |= (m_civicLocation & 0x01) << 6;
|
||||
val |= (m_geospatialLocation & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte3 (uint8_t ctrl)
|
||||
{
|
||||
m_tfs = ctrl & 0x01;
|
||||
m_wnmSleepMode = (ctrl >> 1) & 0x01;
|
||||
m_timBroadcast = (ctrl >> 2) & 0x01;
|
||||
m_bssTransition = (ctrl >> 3) & 0x01;
|
||||
m_qosTrafficCapability = (ctrl >> 4) & 0x01;
|
||||
m_acStationCount = (ctrl >> 5) & 0x01;
|
||||
m_multipleBssid = (ctrl >> 6) & 0x01;
|
||||
m_timingMeasurement = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte3 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_tfs & 0x01;
|
||||
val |= (m_wnmSleepMode & 0x01) << 1;
|
||||
val |= (m_timBroadcast & 0x01) << 2;
|
||||
val |= (m_bssTransition & 0x01) << 3;
|
||||
val |= (m_qosTrafficCapability & 0x01) << 4;
|
||||
val |= (m_acStationCount & 0x01) << 5;
|
||||
val |= (m_multipleBssid & 0x01) << 6;
|
||||
val |= (m_timingMeasurement & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte4 (uint8_t ctrl)
|
||||
{
|
||||
m_channelUsage = ctrl & 0x01;
|
||||
m_ssidList = (ctrl >> 1) & 0x01;
|
||||
m_dms = (ctrl >> 2) & 0x01;
|
||||
m_utcTsfOffset = (ctrl >> 3) & 0x01;
|
||||
m_tpuBufferStaSupport = (ctrl >> 4) & 0x01;
|
||||
m_tdlsPeerPsmSupport = (ctrl >> 5) & 0x01;
|
||||
m_tdlsChannelSwitching = (ctrl >> 6) & 0x01;
|
||||
m_interworking = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte4 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_channelUsage & 0x01;
|
||||
val |= (m_ssidList & 0x01) << 1;
|
||||
val |= (m_dms & 0x01) << 2;
|
||||
val |= (m_utcTsfOffset & 0x01) << 3;
|
||||
val |= (m_tpuBufferStaSupport & 0x01) << 4;
|
||||
val |= (m_tdlsPeerPsmSupport & 0x01) << 5;
|
||||
val |= (m_tdlsChannelSwitching & 0x01) << 6;
|
||||
val |= (m_interworking & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte5 (uint8_t ctrl)
|
||||
{
|
||||
m_qosMap = ctrl & 0x01;
|
||||
m_ebr = (ctrl >> 1) & 0x01;
|
||||
m_sspnInterface = (ctrl >> 2) & 0x01;
|
||||
m_msgcfCapability = (ctrl >> 4) & 0x01;
|
||||
m_tdlsSupport = (ctrl >> 5) & 0x01;
|
||||
m_tdlsProhibited = (ctrl >> 6) & 0x01;
|
||||
m_tdlsChannelSwitchingProhibited = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte5 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_qosMap & 0x01;
|
||||
val |= (m_ebr & 0x01) << 1;
|
||||
val |= (m_sspnInterface & 0x01) << 2;
|
||||
val |= (m_msgcfCapability & 0x01) << 4;
|
||||
val |= (m_tdlsSupport & 0x01) << 5;
|
||||
val |= (m_tdlsProhibited & 0x01) << 6;
|
||||
val |= (m_tdlsChannelSwitchingProhibited & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte6 (uint8_t ctrl)
|
||||
{
|
||||
m_rejectUnadmittedFrame = ctrl & 0x01;
|
||||
m_serviceIntervalGranularity = (ctrl >> 1) & 0x07;
|
||||
m_identifierLocation = (ctrl >> 4) & 0x01;
|
||||
m_uapsdCoexistence = (ctrl >> 5) & 0x01;
|
||||
m_wnmNotification = (ctrl >> 6) & 0x01;
|
||||
m_qabCapability = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte6 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_rejectUnadmittedFrame & 0x01;
|
||||
val |= (m_serviceIntervalGranularity & 0x07) << 1;
|
||||
val |= (m_identifierLocation & 0x01) << 4;
|
||||
val |= (m_uapsdCoexistence & 0x01) << 5;
|
||||
val |= (m_wnmNotification & 0x01) << 6;
|
||||
val |= (m_qabCapability & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte7 (uint8_t ctrl)
|
||||
{
|
||||
m_utf8Ssid = ctrl & 0x01;
|
||||
m_qmfActivated = (ctrl >> 1) & 0x01;
|
||||
m_qmfReconfigurationActivated = (ctrl >> 2) & 0x01;
|
||||
m_robustAvStreaming = (ctrl >> 3) & 0x01;
|
||||
m_advancedGcr = (ctrl >> 4) & 0x01;
|
||||
m_meshGcr = (ctrl >> 5) & 0x01;
|
||||
m_scs = (ctrl >> 6) & 0x01;
|
||||
m_qloadReport = (ctrl >> 7) & 0x01;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte7 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_utf8Ssid & 0x01;
|
||||
val |= (m_qmfActivated & 0x01) << 1;
|
||||
val |= (m_qmfReconfigurationActivated & 0x01) << 2;
|
||||
val |= (m_robustAvStreaming & 0x01) << 3;
|
||||
val |= (m_advancedGcr & 0x01) << 4;
|
||||
val |= (m_meshGcr & 0x01) << 5;
|
||||
val |= (m_scs & 0x01) << 6;
|
||||
val |= (m_qloadReport & 0x01) << 7;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SetExtendedCapabilitiesByte8 (uint8_t ctrl)
|
||||
{
|
||||
m_alternateEdca = ctrl & 0x01;
|
||||
m_unprotectedTxopNegotiation = (ctrl >> 1) & 0x01;
|
||||
m_protectedTxopNegotiation = (ctrl >> 2) & 0x01;
|
||||
m_protectedQloadReport = (ctrl >> 3) & 0x01;
|
||||
m_tdlsWiderBandwidth = (ctrl >> 4) & 0x01;
|
||||
m_operatingModeNotification = (ctrl >> 5) & 0x01;
|
||||
m_maxNumberOfMsdusInAmsdu = (ctrl >> 6) & 0x03;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::GetExtendedCapabilitiesByte8 (void) const
|
||||
{
|
||||
uint8_t val = 0;
|
||||
val |= m_alternateEdca & 0x01;
|
||||
val |= (m_unprotectedTxopNegotiation & 0x01) << 1;
|
||||
val |= (m_protectedTxopNegotiation & 0x01) << 2;
|
||||
val |= (m_protectedQloadReport & 0x01) << 3;
|
||||
val |= (m_tdlsWiderBandwidth & 0x01) << 4;
|
||||
val |= (m_operatingModeNotification & 0x01) << 5;
|
||||
val |= (m_maxNumberOfMsdusInAmsdu & 0x03) << 6;
|
||||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ExtendedCapabilities::SerializeInformationField (Buffer::Iterator start) const
|
||||
{
|
||||
if (m_htSupported > 0 && m_vhtSupported == 0)
|
||||
{
|
||||
//write the corresponding value for each bit
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte1 () & 0x7f);
|
||||
}
|
||||
else if (m_vhtSupported > 0)
|
||||
{
|
||||
//write the corresponding value for each bit
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte1 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte2 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte3 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte4 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte5 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte6 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte7 ());
|
||||
start.WriteU8 (GetExtendedCapabilitiesByte8 ());
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ExtendedCapabilities::DeserializeInformationField (Buffer::Iterator start, uint8_t length)
|
||||
{
|
||||
Buffer::Iterator i = start;
|
||||
if (m_htSupported > 0 && m_vhtSupported == 0)
|
||||
{
|
||||
uint8_t byte1 = i.ReadU8 ();
|
||||
SetExtendedCapabilitiesByte1 (byte1 & 0x7f);
|
||||
}
|
||||
else if (m_vhtSupported > 0)
|
||||
{
|
||||
uint8_t byte1 = i.ReadU8 ();
|
||||
uint8_t byte2 = i.ReadU8 ();
|
||||
uint8_t byte3 = i.ReadU8 ();
|
||||
uint8_t byte4 = i.ReadU8 ();
|
||||
uint8_t byte5 = i.ReadU8 ();
|
||||
uint8_t byte6 = i.ReadU8 ();
|
||||
uint8_t byte7 = i.ReadU8 ();
|
||||
uint8_t byte8 = i.ReadU8 ();
|
||||
SetExtendedCapabilitiesByte1 (byte1);
|
||||
SetExtendedCapabilitiesByte2 (byte2);
|
||||
SetExtendedCapabilitiesByte3 (byte3);
|
||||
SetExtendedCapabilitiesByte4 (byte4);
|
||||
SetExtendedCapabilitiesByte5 (byte5);
|
||||
SetExtendedCapabilitiesByte6 (byte6);
|
||||
SetExtendedCapabilitiesByte7 (byte7);
|
||||
SetExtendedCapabilitiesByte8 (byte8);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
ATTRIBUTE_HELPER_CPP (ExtendedCapabilities);
|
||||
|
||||
/**
|
||||
* output stream output operator
|
||||
*
|
||||
* \param os output stream
|
||||
* \param extendedcapabilities the extended capabilities
|
||||
*
|
||||
* \returns output stream
|
||||
*/
|
||||
std::ostream &
|
||||
operator << (std::ostream &os, const ExtendedCapabilities &extendedcapabilities)
|
||||
{
|
||||
return os;
|
||||
}
|
||||
|
||||
/**
|
||||
* input stream input operator
|
||||
*
|
||||
* \param is input stream
|
||||
* \param extendedcapabilities the extended capabilities
|
||||
*
|
||||
* \returns input stream
|
||||
*/
|
||||
std::istream &operator >> (std::istream &is, ExtendedCapabilities &extendedcapabilities)
|
||||
{
|
||||
return is;
|
||||
}
|
||||
|
||||
} //namespace ns3
|
||||
278
src/wifi/model/extended-capabilities.h
Normal file
278
src/wifi/model/extended-capabilities.h
Normal file
@@ -0,0 +1,278 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2017
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef EXTENDED_CAPABILITIES_H
|
||||
#define EXTENDED_CAPABILITIES_H
|
||||
|
||||
#include "wifi-information-element.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief The Extended Capabilities Information Element
|
||||
* \ingroup wifi
|
||||
*
|
||||
* This class knows how to serialise and deserialise the Extended Capabilities Information Element
|
||||
*
|
||||
* \see attribute_ExtendedCapabilities
|
||||
*/
|
||||
class ExtendedCapabilities : public WifiInformationElement
|
||||
{
|
||||
public:
|
||||
ExtendedCapabilities ();
|
||||
/**
|
||||
* Set the HT Supported flag.
|
||||
*
|
||||
* \param htsupported flag whether HT is supported
|
||||
*/
|
||||
void SetHtSupported (uint8_t htsupported);
|
||||
/**
|
||||
* Set the VHT Supported flag.
|
||||
*
|
||||
* \param vhtsupported flag whether VHT is supported
|
||||
*/
|
||||
void SetVhtSupported (uint8_t vhtsupported);
|
||||
|
||||
/**
|
||||
* Set the first byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the first byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte1 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the second byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the second byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte2 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the third byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the third byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte3 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the fourth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the fourth byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte4 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the fifth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the fifth byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte5 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the sixth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the sixth byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte6 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the seventh byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the seventh byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte7 (uint8_t ctrl);
|
||||
/**
|
||||
* Set the eighth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \param ctrl the eighth byte in the Extended Capabilities information element
|
||||
*/
|
||||
void SetExtendedCapabilitiesByte8 (uint8_t ctrl);
|
||||
|
||||
/**
|
||||
* Return the first byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the first byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte1 (void) const;
|
||||
/**
|
||||
* Return the second byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the second byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte2 (void) const;
|
||||
/**
|
||||
* Return the third byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the third byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte3 (void) const;
|
||||
/**
|
||||
* Return the fourth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the fourth byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte4 (void) const;
|
||||
/**
|
||||
* Return the fifth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the fifth byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte5 (void) const;
|
||||
/**
|
||||
* Return the sixth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the sixth byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte6 (void) const;
|
||||
/**
|
||||
* Return the seventh byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the seventh byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte7 (void) const;
|
||||
/**
|
||||
* Return the eighth byte in the Extended Capabilities information element.
|
||||
*
|
||||
* \return the eighth byte in the Extended Capabilities information element
|
||||
*/
|
||||
uint8_t GetExtendedCapabilitiesByte8 (void) const;
|
||||
|
||||
/**
|
||||
* Return the element ID.
|
||||
*
|
||||
* \return the element ID
|
||||
*/
|
||||
WifiInformationElementId ElementId () const;
|
||||
/**
|
||||
* Return the information field size.
|
||||
*
|
||||
* \return the information field size
|
||||
*/
|
||||
uint8_t GetInformationFieldSize () const;
|
||||
/**
|
||||
* Serialize the information field.
|
||||
*
|
||||
* \param start the information field
|
||||
*/
|
||||
void SerializeInformationField (Buffer::Iterator start) const;
|
||||
/**
|
||||
* Return the information field.
|
||||
*
|
||||
* \param start field
|
||||
* \param length field length
|
||||
*
|
||||
* \return the information field
|
||||
*/
|
||||
uint8_t DeserializeInformationField (Buffer::Iterator start,
|
||||
uint8_t length);
|
||||
/**
|
||||
* This information element is a bit special in that it is only
|
||||
* included if the STA is an HT or a VHT STA. To support this we
|
||||
* override the Serialize and GetSerializedSize methods of
|
||||
* WifiInformationElement.
|
||||
*
|
||||
* \param start
|
||||
*
|
||||
* \return an iterator
|
||||
*/
|
||||
Buffer::Iterator Serialize (Buffer::Iterator start) const;
|
||||
/**
|
||||
* Return the serialized size of this extended capabilities information element.
|
||||
*
|
||||
* \return the serialized size of this extended capabilities information element
|
||||
*/
|
||||
uint16_t GetSerializedSize () const;
|
||||
|
||||
|
||||
private:
|
||||
//fields supported by HT and VHT
|
||||
uint8_t m_20_40_bssCoexistenceManagementSupport; ///< 20/40 BSS Coexistence Management Support
|
||||
uint8_t m_extendedChannelSwitching; ///< Extended Channel Switching
|
||||
uint8_t m_psmpCapability; ///< PSMP Capability
|
||||
uint8_t m_spsmpSupport; ///< S-PSMP Support
|
||||
|
||||
//fields supported by VHT
|
||||
uint8_t m_event; ///< Event
|
||||
uint8_t m_diagnostics; ///< Diagnostics
|
||||
uint8_t m_multicastDiagnostics; ///< Multicast Diagnostics
|
||||
uint8_t m_locationTracking; ///< Location Tracking
|
||||
uint8_t m_fms; ///< FMS
|
||||
uint8_t m_proxyArpService; ///< Proxy ARP Service
|
||||
uint8_t m_collocatedInterferenceReporting; ///< Collocated Interference Reporting
|
||||
uint8_t m_civicLocation; ///< Civic Location
|
||||
uint8_t m_geospatialLocation; ///< Geospatial Location
|
||||
|
||||
uint8_t m_tfs; ///< TFS
|
||||
uint8_t m_wnmSleepMode; ///< WNM Sleep Mode
|
||||
uint8_t m_timBroadcast; ///< TIM Broadcast
|
||||
uint8_t m_bssTransition; ///< BSS Transition
|
||||
uint8_t m_qosTrafficCapability; ///< QoS Traffic Capability
|
||||
uint8_t m_acStationCount; ///< AC Station Count
|
||||
uint8_t m_multipleBssid; ///< Multiple BSSID
|
||||
uint8_t m_timingMeasurement; ///< Timing Measurement
|
||||
|
||||
uint8_t m_channelUsage; ///< Channel Usage
|
||||
uint8_t m_ssidList; ///< SSID List
|
||||
uint8_t m_dms; ///< DMS
|
||||
uint8_t m_utcTsfOffset; ///< UTC TSF Offset
|
||||
uint8_t m_tpuBufferStaSupport; ///< TPU Buffer STA Support
|
||||
uint8_t m_tdlsPeerPsmSupport; ///< TDLS Peer PSM Support
|
||||
uint8_t m_tdlsChannelSwitching; ///< TDLS Channel Switching
|
||||
uint8_t m_interworking; ///< Interworking
|
||||
|
||||
uint8_t m_qosMap; ///< QoS Map
|
||||
uint8_t m_ebr; ///< EBR
|
||||
uint8_t m_sspnInterface; ///< SSPN Interface
|
||||
uint8_t m_msgcfCapability; ///< MSGCF Capability
|
||||
uint8_t m_tdlsSupport; ///< TDLS Support
|
||||
uint8_t m_tdlsProhibited; ///< TDLS Prohibited
|
||||
uint8_t m_tdlsChannelSwitchingProhibited; ///< TDLS Channel Switching Prohibited
|
||||
|
||||
uint8_t m_rejectUnadmittedFrame; ///< Reject Unadmitted Frame
|
||||
uint8_t m_serviceIntervalGranularity; ///< Service Interval Granularity
|
||||
uint8_t m_identifierLocation; ///< Identifier Location
|
||||
uint8_t m_uapsdCoexistence; ///< U-APSD Coexistence
|
||||
uint8_t m_wnmNotification; ///< WNM Notification
|
||||
uint8_t m_qabCapability; ///< QAB Capability
|
||||
|
||||
uint8_t m_utf8Ssid; ///< UTF-8 SSID
|
||||
uint8_t m_qmfActivated; ///< QMFActivated
|
||||
uint8_t m_qmfReconfigurationActivated; ///< QMFReconfigurationActivated
|
||||
uint8_t m_robustAvStreaming; ///< Robust AV Streaming
|
||||
uint8_t m_advancedGcr; ///< Advanced GCR
|
||||
uint8_t m_meshGcr; ///< Mesh GCR
|
||||
uint8_t m_scs; ///< SCS
|
||||
uint8_t m_qloadReport; ///< QLoad Report
|
||||
|
||||
uint8_t m_alternateEdca; ///< Alternate EDCA
|
||||
uint8_t m_unprotectedTxopNegotiation; ///< Unprotected TXOP Negotiation
|
||||
uint8_t m_protectedTxopNegotiation; ///< Protected TXOP Negotiation
|
||||
uint8_t m_protectedQloadReport; ///< Protected QLoad Report
|
||||
uint8_t m_tdlsWiderBandwidth; ///< TDLS Wider Bandwidth
|
||||
uint8_t m_operatingModeNotification; ///< Operating Mode Notification
|
||||
uint8_t m_maxNumberOfMsdusInAmsdu; ///< Max Number Of MSDUs In A-MSDU
|
||||
|
||||
/// Those are used to decide whether this element should be added to the frame or not
|
||||
uint8_t m_htSupported;
|
||||
uint8_t m_vhtSupported;
|
||||
};
|
||||
|
||||
std::ostream &operator << (std::ostream &os, const ExtendedCapabilities &extendedcapabilities);
|
||||
std::istream &operator >> (std::istream &is, ExtendedCapabilities &extendedcapabilities);
|
||||
|
||||
ATTRIBUTE_HELPER_HEADER (ExtendedCapabilities);
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
#endif /* EXTENDED_CAPABILITIES_H */
|
||||
Reference in New Issue
Block a user