21 #include "supported-rates.h"
22 #include "ns3/assert.h"
29 SupportedRates::SupportedRates ()
36 SupportedRates::AddSupportedRate (uint32_t bs)
38 NS_ASSERT (m_nRates < MAX_SUPPORTED_RATES);
39 if (IsSupportedRate (bs))
43 m_rates[m_nRates] = bs / 500000;
45 NS_LOG_DEBUG (
"add rate=" << bs <<
", n rates=" << (uint32_t)m_nRates);
48 SupportedRates::SetBasicRate (uint32_t bs)
50 uint8_t rate = bs / 500000;
51 for (uint8_t i = 0; i < m_nRates; i++)
53 if ((rate | 0x80) == m_rates[i])
57 if (rate == m_rates[i])
59 NS_LOG_DEBUG (
"set basic rate=" << bs <<
", n rates=" << (uint32_t)m_nRates);
64 AddSupportedRate (bs);
68 SupportedRates::IsBasicRate (uint32_t bs)
const
70 uint8_t rate = (bs / 500000) | 0x80;
71 for (uint8_t i = 0; i < m_nRates; i++)
73 if (rate == m_rates[i])
81 SupportedRates::IsSupportedRate (uint32_t bs)
const
83 uint8_t rate = bs / 500000;
84 for (uint8_t i = 0; i < m_nRates; i++)
86 if (rate == m_rates[i]
87 || (rate | 0x80) == m_rates[i])
95 SupportedRates::GetNRates (
void)
const
100 SupportedRates::GetRate (uint8_t i)
const
102 return (m_rates[i] & 0x7f) * 500000;
108 return IE_SUPPORTED_RATES;
116 return m_nRates > 8 ? 8 : m_nRates;
124 start.
Write (m_rates, m_nRates > 8 ? 8 : m_nRates);
132 start.
Read (m_rates, m_nRates);
136 ExtendedSupportedRatesIE::ExtendedSupportedRatesIE ()
140 ExtendedSupportedRatesIE::ExtendedSupportedRatesIE (SupportedRates *sr)
148 return IE_EXTENDED_SUPPORTED_RATES;
195 ExtendedSupportedRatesIE::GetSerializedSize ()
const
223 for (uint8_t i = 0; i < rates.GetNRates (); i++)
225 uint32_t rate = rates.GetRate (i);
226 if (rates.IsBasicRate (rate))
230 os << rate / 1000000 <<
"mbs";
231 if (i < rates.GetNRates () - 1)
uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
void SerializeInformationField(Buffer::Iterator start) const
The Supported Rates Information ElementThis class knows how to serialise and deserialise the Supporte...
iterator in a Buffer instance
WifiInformationElementId ElementId() const
Own unique Element ID.
uint8_t GetInformationFieldSize() const
std::ostream & operator<<(std::ostream &os, const Angles &a)
void Read(uint8_t *buffer, uint32_t size)
uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
SupportedRates * m_supportedRates
WifiInformationElementId ElementId() const
Own unique Element ID.
#define NS_LOG_DEBUG(msg)
void Write(uint8_t const *buffer, uint32_t size)
uint8_t WifiInformationElementId
uint8_t GetInformationFieldSize() const
void SerializeInformationField(Buffer::Iterator start) const