wifi: introduce Extended Capabilities information element to HT and VHT management frames

This commit is contained in:
Sébastien Deronne
2017-12-17 10:26:16 +01:00
parent cc490fe2c7
commit 98312b8929
8 changed files with 152 additions and 8 deletions

View File

@@ -39,7 +39,7 @@ cpp_examples = [
("ht-wifi-network --simulationTime=0.1 --minExpectedThroughput=5 --maxExpectedThroughput=134", "True", "True"),
("vht-wifi-network --simulationTime=0.1 --minExpectedThroughput=5 --maxExpectedThroughput=555", "True", "True"),
("he-wifi-network --simulationTime=0.25 --minExpectedThroughput=6.35 --maxExpectedThroughput=754", "True", "True"),
("simple-ht-hidden-stations --simulationTime=1 --minExpectedThroughput=16.7 --maxExpectedThroughput=16.8", "True", "True"),
("simple-ht-hidden-stations --simulationTime=1 --minExpectedThroughput=16.5 --maxExpectedThroughput=17", "True", "True"),
("mixed-network --simulationTime=1", "True", "True"),
("wifi-aggregation --simulationTime=1 --verifyResults=1", "True", "True"),
("80211e-txop --simulationTime=1 --verifyResults=1", "True", "True"),

View File

@@ -695,6 +695,7 @@ ApWifiMac::SendProbeResp (Mac48Address to)
}
if (m_htSupported || m_vhtSupported || m_heSupported)
{
probe.SetExtendedCapabilities (GetExtendedCapabilities ());
probe.SetHtCapabilities (GetHtCapabilities ());
probe.SetHtOperation (GetHtOperation ());
}
@@ -754,6 +755,7 @@ ApWifiMac::SendAssocResp (Mac48Address to, bool success)
}
if (m_htSupported || m_vhtSupported || m_heSupported)
{
assoc.SetExtendedCapabilities (GetExtendedCapabilities ());
assoc.SetHtCapabilities (GetHtCapabilities ());
assoc.SetHtOperation (GetHtOperation ());
}
@@ -810,6 +812,7 @@ ApWifiMac::SendOneBeacon (void)
}
if (m_htSupported || m_vhtSupported)
{
beacon.SetExtendedCapabilities (GetExtendedCapabilities ());
beacon.SetHtCapabilities (GetHtCapabilities ());
beacon.SetHtOperation (GetHtOperation ());
}

View File

@@ -53,6 +53,18 @@ MgtProbeRequestHeader::SetSupportedRates (SupportedRates rates)
m_rates = rates;
}
void
MgtProbeRequestHeader::SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities)
{
m_extendedCapability = extendedcapabilities;
}
ExtendedCapabilities
MgtProbeRequestHeader::GetExtendedCapabilities (void) const
{
return m_extendedCapability;
}
void
MgtProbeRequestHeader::SetHtCapabilities (HtCapabilities htcapabilities)
{
@@ -102,6 +114,7 @@ MgtProbeRequestHeader::GetSerializedSize (void) const
size += m_ssid.GetSerializedSize ();
size += m_rates.GetSerializedSize ();
size += m_rates.extended.GetSerializedSize ();
size += m_extendedCapability.GetSerializedSize ();
size += m_htCapability.GetSerializedSize ();
size += m_vhtCapability.GetSerializedSize ();
size += m_heCapability.GetSerializedSize ();
@@ -142,6 +155,7 @@ MgtProbeRequestHeader::Serialize (Buffer::Iterator start) const
i = m_ssid.Serialize (i);
i = m_rates.Serialize (i);
i = m_rates.extended.Serialize (i);
i = m_extendedCapability.Serialize (i);
i = m_htCapability.Serialize (i);
i = m_vhtCapability.Serialize (i);
i = m_heCapability.Serialize (i);
@@ -154,6 +168,7 @@ MgtProbeRequestHeader::Deserialize (Buffer::Iterator start)
i = m_ssid.Deserialize (i);
i = m_rates.Deserialize (i);
i = m_rates.extended.DeserializeIfPresent (i);
i = m_extendedCapability.DeserializeIfPresent (i);
i = m_htCapability.DeserializeIfPresent (i);
i = m_vhtCapability.DeserializeIfPresent (i);
i = m_heCapability.DeserializeIfPresent (i);
@@ -211,6 +226,18 @@ MgtProbeResponseHeader::GetCapabilities (void) const
return m_capability;
}
void
MgtProbeResponseHeader::SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities)
{
m_extendedCapability = extendedcapabilities;
}
ExtendedCapabilities
MgtProbeResponseHeader::GetExtendedCapabilities (void) const
{
return m_extendedCapability;
}
void
MgtProbeResponseHeader::SetHtCapabilities (HtCapabilities htcapabilities)
{
@@ -367,6 +394,7 @@ MgtProbeResponseHeader::GetSerializedSize (void) const
size += m_erpInformation.GetSerializedSize ();
size += m_rates.extended.GetSerializedSize ();
size += m_edcaParameterSet.GetSerializedSize ();
size += m_extendedCapability.GetSerializedSize ();
size += m_htCapability.GetSerializedSize ();
size += m_htOperation.GetSerializedSize ();
size += m_vhtCapability.GetSerializedSize ();
@@ -412,6 +440,7 @@ MgtProbeResponseHeader::Serialize (Buffer::Iterator start) const
i = m_erpInformation.Serialize (i);
i = m_rates.extended.Serialize (i);
i = m_edcaParameterSet.Serialize (i);
i = m_extendedCapability.Serialize (i);
i = m_htCapability.Serialize (i);
i = m_htOperation.Serialize (i);
i = m_vhtCapability.Serialize (i);
@@ -434,6 +463,7 @@ MgtProbeResponseHeader::Deserialize (Buffer::Iterator start)
i = m_erpInformation.DeserializeIfPresent (i);
i = m_rates.extended.DeserializeIfPresent (i);
i = m_edcaParameterSet.DeserializeIfPresent (i);
i = m_extendedCapability.DeserializeIfPresent (i);
i = m_htCapability.DeserializeIfPresent (i);
i = m_htOperation.DeserializeIfPresent (i);
i = m_vhtCapability.DeserializeIfPresent (i);
@@ -508,6 +538,18 @@ MgtAssocRequestHeader::GetCapabilities (void) const
return m_capability;
}
void
MgtAssocRequestHeader::SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities)
{
m_extendedCapability = extendedcapabilities;
}
ExtendedCapabilities
MgtAssocRequestHeader::GetExtendedCapabilities (void) const
{
return m_extendedCapability;
}
void
MgtAssocRequestHeader::SetHtCapabilities (HtCapabilities htcapabilities)
{
@@ -588,6 +630,7 @@ MgtAssocRequestHeader::GetSerializedSize (void) const
size += m_ssid.GetSerializedSize ();
size += m_rates.GetSerializedSize ();
size += m_rates.extended.GetSerializedSize ();
size += m_extendedCapability.GetSerializedSize ();
size += m_htCapability.GetSerializedSize ();
size += m_vhtCapability.GetSerializedSize ();
size += m_heCapability.GetSerializedSize ();
@@ -613,6 +656,7 @@ MgtAssocRequestHeader::Serialize (Buffer::Iterator start) const
i = m_ssid.Serialize (i);
i = m_rates.Serialize (i);
i = m_rates.extended.Serialize (i);
i = m_extendedCapability.Serialize (i);
i = m_htCapability.Serialize (i);
i = m_vhtCapability.Serialize (i);
i = m_heCapability.Serialize (i);
@@ -627,6 +671,7 @@ MgtAssocRequestHeader::Deserialize (Buffer::Iterator start)
i = m_ssid.Deserialize (i);
i = m_rates.Deserialize (i);
i = m_rates.extended.DeserializeIfPresent (i);
i = m_extendedCapability.DeserializeIfPresent (i);
i = m_htCapability.DeserializeIfPresent (i);
i = m_vhtCapability.DeserializeIfPresent (i);
i = m_heCapability.DeserializeIfPresent (i);
@@ -685,6 +730,18 @@ MgtAssocResponseHeader::GetCapabilities (void) const
return m_capability;
}
void
MgtAssocResponseHeader::SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities)
{
m_extendedCapability = extendedcapabilities;
}
ExtendedCapabilities
MgtAssocResponseHeader::GetExtendedCapabilities (void) const
{
return m_extendedCapability;
}
void
MgtAssocResponseHeader::SetHtCapabilities (HtCapabilities htcapabilities)
{
@@ -809,6 +866,7 @@ MgtAssocResponseHeader::GetSerializedSize (void) const
size += m_erpInformation.GetSerializedSize ();
size += m_rates.extended.GetSerializedSize ();
size += m_edcaParameterSet.GetSerializedSize ();
size += m_extendedCapability.GetSerializedSize ();
size += m_htCapability.GetSerializedSize ();
size += m_htOperation.GetSerializedSize ();
size += m_vhtCapability.GetSerializedSize ();
@@ -843,6 +901,7 @@ MgtAssocResponseHeader::Serialize (Buffer::Iterator start) const
i = m_erpInformation.Serialize (i);
i = m_rates.extended.Serialize (i);
i = m_edcaParameterSet.Serialize (i);
i = m_extendedCapability.Serialize (i);
i = m_htCapability.Serialize (i);
i = m_htOperation.Serialize (i);
i = m_vhtCapability.Serialize (i);
@@ -862,6 +921,7 @@ MgtAssocResponseHeader::Deserialize (Buffer::Iterator start)
i = m_erpInformation.DeserializeIfPresent (i);
i = m_rates.extended.DeserializeIfPresent (i);
i = m_edcaParameterSet.DeserializeIfPresent (i);
i = m_extendedCapability.DeserializeIfPresent (i);
i = m_htCapability.DeserializeIfPresent (i);
i = m_htOperation.DeserializeIfPresent (i);
i = m_vhtCapability.DeserializeIfPresent (i);

View File

@@ -28,6 +28,7 @@
#include "supported-rates.h"
#include "ssid.h"
#include "dsss-parameter-set.h"
#include "extended-capabilities.h"
#include "ht-capabilities.h"
#include "ht-operation.h"
#include "vht-capabilities.h"
@@ -73,6 +74,12 @@ public:
* \param capabilities Capability information
*/
void SetCapabilities (CapabilityInformation capabilities);
/**
* Set the Extended Capabilities.
*
* \param extendedcapabilities the Extended Capabilities
*/
void SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities);
/**
* Set the HT capabilities.
*
@@ -97,6 +104,12 @@ public:
* \return Capability information
*/
CapabilityInformation GetCapabilities (void) const;
/**
* Return the extended capabilities.
*
* \return the extended capabilities
*/
ExtendedCapabilities GetExtendedCapabilities (void) const;
/**
* Return the HT capabilities.
*
@@ -150,6 +163,7 @@ private:
Ssid m_ssid; //!< Service Set ID (SSID)
SupportedRates m_rates; //!< List of supported rates
CapabilityInformation m_capability; //!< Capability information
ExtendedCapabilities m_extendedCapability; //!< Extended capabilities
HtCapabilities m_htCapability; //!< HT capabilities
VhtCapabilities m_vhtCapability; //!< VHT capabilities
HeCapabilities m_heCapability; //!< HE capabilities
@@ -185,6 +199,12 @@ public:
* \return Capability information
*/
CapabilityInformation GetCapabilities (void) const;
/**
* Return the extended capabilities.
*
* \return the extended capabilities
*/
ExtendedCapabilities GetExtendedCapabilities (void) const;
/**
* Return the HT capabilities.
*
@@ -239,6 +259,12 @@ public:
* \param capabilities Capability information
*/
void SetCapabilities (CapabilityInformation capabilities);
/**
* Set the extended capabilities.
*
* \param extendedcapabilities the extended capabilities
*/
void SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities);
/**
* Set the VHT operation.
*
@@ -317,6 +343,7 @@ private:
CapabilityInformation m_capability; //!< Capability information
StatusCode m_code; //!< Status code
uint16_t m_aid; //!< aid
ExtendedCapabilities m_extendedCapability; //!< extended capabilities
HtCapabilities m_htCapability; //!< HT capabilities
HtOperation m_htOperation; //!< HT operation
VhtCapabilities m_vhtCapability; //!< VHT capabilities
@@ -349,6 +376,12 @@ public:
* \param rates the supported rates
*/
void SetSupportedRates (SupportedRates rates);
/**
* Set the extended capabilities.
*
* \param extendedcapabilities the extended capabilities
*/
void SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities);
/**
* Set the HT capabilities.
*
@@ -379,6 +412,12 @@ public:
* \return the supported rates
*/
SupportedRates GetSupportedRates (void) const;
/**
* Return the extended capabilities.
*
* \return the extended capabilities
*/
ExtendedCapabilities GetExtendedCapabilities (void) const;
/**
* Return the HT capabilities.
*
@@ -413,6 +452,7 @@ public:
private:
Ssid m_ssid; //!< Service Set ID (SSID)
SupportedRates m_rates; //!< List of supported rates
ExtendedCapabilities m_extendedCapability; //!< extended capabilities
HtCapabilities m_htCapability; //!< HT capabilities
VhtCapabilities m_vhtCapability; //!< VHT capabilities
HeCapabilities m_heCapability; //!< HE capabilities
@@ -459,6 +499,12 @@ public:
* \return the DSSS Parameter Set
*/
DsssParameterSet GetDsssParameterSet (void) const;
/**
* Return the extended capabilities.
*
* \return the extended capabilities
*/
ExtendedCapabilities GetExtendedCapabilities (void) const;
/**
* Return the HT capabilities.
*
@@ -514,6 +560,12 @@ public:
*/
void SetCapabilities (CapabilityInformation capabilities);
/**
* Set the extended capabilities.
*
* \param extendedcapabilities the extended capabilities
*/
void SetExtendedCapabilities (ExtendedCapabilities extendedcapabilities);
/*
* Set the HT capabilities.
*
* \param htcapabilities HT capabilities
@@ -611,6 +663,7 @@ private:
SupportedRates m_rates; //!< List of supported rates
CapabilityInformation m_capability; //!< Capability information
DsssParameterSet m_dsssParameterSet; //!< DSSS Parameter Set
ExtendedCapabilities m_extendedCapability; //!< extended capabilities
HtCapabilities m_htCapability; //!< HT capabilities
HtOperation m_htOperation; //!< HT operation
VhtCapabilities m_vhtCapability; //!< VHT capabilities

View File

@@ -139,6 +139,25 @@ RegularWifiMac::GetWifiRemoteStationManager () const
return m_stationManager;
}
ExtendedCapabilities
RegularWifiMac::GetExtendedCapabilities (void) const
{
NS_LOG_FUNCTION (this);
ExtendedCapabilities capabilities;
if (m_htSupported || m_vhtSupported)
{
if (m_htSupported)
{
capabilities.SetHtSupported (1);
}
if (m_vhtSupported)
{
capabilities.SetVhtSupported (1);
}
}
return capabilities;
}
HtCapabilities
RegularWifiMac::GetHtCapabilities (void) const
{
@@ -146,7 +165,6 @@ RegularWifiMac::GetHtCapabilities (void) const
HtCapabilities capabilities;
if (m_htSupported)
{
capabilities.SetHtSupported (1);
capabilities.SetHtSupported (1);
capabilities.SetLdpc (m_phy->GetLdpc ());
capabilities.SetSupportedChannelWidth (m_phy->GetChannelWidth () >= 40);

View File

@@ -234,21 +234,27 @@ public:
*/
Ptr<WifiRemoteStationManager> GetWifiRemoteStationManager (void) const;
/**
* Return the HT capability of the device.
* Return the extended capabilities of the device.
*
* \return the HT capability that we support
* \return the extended capabilities that we support
*/
ExtendedCapabilities GetExtendedCapabilities (void) const;
/**
* Return the HT capabilities of the device.
*
* \return the HT capabilities that we support
*/
HtCapabilities GetHtCapabilities (void) const;
/**
* Return the VHT capability of the device.
* Return the VHT capabilities of the device.
*
* \return the VHT capability that we support
* \return the VHT capabilities that we support
*/
VhtCapabilities GetVhtCapabilities (void) const;
/**
* Return the HE capability of the device.
* Return the HE capabilities of the device.
*
* \return the HE capability that we support
* \return the HE capabilities that we support
*/
HeCapabilities GetHeCapabilities (void) const;

View File

@@ -143,6 +143,7 @@ StaWifiMac::SendProbeRequest (void)
probe.SetSupportedRates (GetSupportedRates ());
if (m_htSupported || m_vhtSupported || m_heSupported)
{
probe.SetExtendedCapabilities (GetExtendedCapabilities ());
probe.SetHtCapabilities (GetHtCapabilities ());
}
if (m_vhtSupported || m_heSupported)
@@ -188,6 +189,7 @@ StaWifiMac::SendAssociationRequest (void)
assoc.SetCapabilities (GetCapabilities ());
if (m_htSupported || m_vhtSupported || m_heSupported)
{
assoc.SetExtendedCapabilities (GetExtendedCapabilities ());
assoc.SetHtCapabilities (GetHtCapabilities ());
}
if (m_vhtSupported || m_heSupported)

View File

@@ -84,6 +84,7 @@ def build(bld):
'model/frame-capture-model.cc',
'model/simple-frame-capture-model.cc',
'model/he-operation.cc',
'model/extended-capabilities.cc',
'helper/wifi-radio-energy-model-helper.cc',
'helper/vht-wifi-mac-helper.cc',
'helper/ht-wifi-mac-helper.cc',
@@ -194,6 +195,7 @@ def build(bld):
'model/simple-frame-capture-model.h',
'model/qos-blocked-destinations.h',
'model/he-operation.h',
'model/extended-capabilities.h',
'helper/wifi-radio-energy-model-helper.h',
'helper/vht-wifi-mac-helper.h',
'helper/ht-wifi-mac-helper.h',