Bug 881: Make Ssid and SupportedRates derive from WifiInformationElement
This commit is contained in:
@@ -151,7 +151,7 @@ PeerLinkFrameStart::Serialize (Buffer::Iterator start) const
|
||||
}
|
||||
if ((uint8_t) (WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
|
||||
{
|
||||
i = m_rates.Serialize (i);
|
||||
i = m_rates.SerializeIE (i);
|
||||
}
|
||||
if ((uint8_t) (WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
|
||||
{
|
||||
@@ -191,7 +191,7 @@ PeerLinkFrameStart::Deserialize (Buffer::Iterator start)
|
||||
}
|
||||
if ((uint8_t) (WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
|
||||
{
|
||||
i = m_rates.Deserialize (i);
|
||||
i = m_rates.DeserializeIE (i);
|
||||
}
|
||||
if ((uint8_t) (WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
|
||||
{
|
||||
|
||||
@@ -87,15 +87,15 @@ void
|
||||
MgtProbeRequestHeader::Serialize (Buffer::Iterator start) const
|
||||
{
|
||||
Buffer::Iterator i = start;
|
||||
i = m_ssid.Serialize (i);
|
||||
i = m_rates.Serialize (i);
|
||||
i = m_ssid.SerializeIE (i);
|
||||
i = m_rates.SerializeIE (i);
|
||||
}
|
||||
uint32_t
|
||||
MgtProbeRequestHeader::Deserialize (Buffer::Iterator start)
|
||||
{
|
||||
Buffer::Iterator i = start;
|
||||
i = m_ssid.Deserialize (i);
|
||||
i = m_rates.Deserialize (i);
|
||||
i = m_ssid.DeserializeIE (i);
|
||||
i = m_rates.DeserializeIE (i);
|
||||
return i.GetDistanceFrom (start);
|
||||
}
|
||||
|
||||
@@ -196,8 +196,8 @@ MgtProbeResponseHeader::Serialize (Buffer::Iterator start) const
|
||||
i.WriteHtonU64 (Simulator::Now ().GetMicroSeconds ());
|
||||
i.WriteHtonU16 (m_beaconInterval / 1024);
|
||||
i = m_capability.Serialize (i);
|
||||
i = m_ssid.Serialize (i);
|
||||
i = m_rates.Serialize (i);
|
||||
i = m_ssid.SerializeIE (i);
|
||||
i = m_rates.SerializeIE (i);
|
||||
//i.WriteU8 (0, 3); // ds parameter set.
|
||||
}
|
||||
uint32_t
|
||||
@@ -208,8 +208,8 @@ MgtProbeResponseHeader::Deserialize (Buffer::Iterator start)
|
||||
m_beaconInterval = i.ReadNtohU16 ();
|
||||
m_beaconInterval *= 1024;
|
||||
i = m_capability.Deserialize (i);
|
||||
i = m_ssid.Deserialize (i);
|
||||
i = m_rates.Deserialize (i);
|
||||
i = m_ssid.DeserializeIE (i);
|
||||
i = m_rates.DeserializeIE (i);
|
||||
//i.Next (3); // ds parameter set
|
||||
return i.GetDistanceFrom (start);
|
||||
}
|
||||
@@ -293,8 +293,8 @@ MgtAssocRequestHeader::Serialize (Buffer::Iterator start) const
|
||||
Buffer::Iterator i = start;
|
||||
i = m_capability.Serialize (i);
|
||||
i.WriteHtonU16 (m_listenInterval);
|
||||
i = m_ssid.Serialize (i);
|
||||
i = m_rates.Serialize (i);
|
||||
i = m_ssid.SerializeIE (i);
|
||||
i = m_rates.SerializeIE (i);
|
||||
}
|
||||
uint32_t
|
||||
MgtAssocRequestHeader::Deserialize (Buffer::Iterator start)
|
||||
@@ -302,8 +302,8 @@ MgtAssocRequestHeader::Deserialize (Buffer::Iterator start)
|
||||
Buffer::Iterator i = start;
|
||||
i = m_capability.Deserialize (i);
|
||||
m_listenInterval = i.ReadNtohU16 ();
|
||||
i = m_ssid.Deserialize (i);
|
||||
i = m_rates.Deserialize (i);
|
||||
i = m_ssid.DeserializeIE (i);
|
||||
i = m_rates.DeserializeIE (i);
|
||||
return i.GetDistanceFrom (start);
|
||||
}
|
||||
|
||||
@@ -378,7 +378,7 @@ MgtAssocResponseHeader::Serialize (Buffer::Iterator start) const
|
||||
i = m_capability.Serialize (i);
|
||||
i = m_code.Serialize (i);
|
||||
i.WriteHtonU16 (m_aid);
|
||||
i = m_rates.Serialize (i);
|
||||
i = m_rates.SerializeIE (i);
|
||||
}
|
||||
uint32_t
|
||||
MgtAssocResponseHeader::Deserialize (Buffer::Iterator start)
|
||||
@@ -387,7 +387,7 @@ MgtAssocResponseHeader::Deserialize (Buffer::Iterator start)
|
||||
i = m_capability.Deserialize (i);
|
||||
i = m_code.Deserialize (i);
|
||||
m_aid = i.ReadNtohU16 ();
|
||||
i = m_rates.Deserialize (i);
|
||||
i = m_rates.DeserializeIE (i);
|
||||
return i.GetDistanceFrom (start);
|
||||
}
|
||||
/**********************************************************
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
#include "ssid.h"
|
||||
#include "ns3/assert.h"
|
||||
|
||||
#define ELEMENT_ID (0)
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
Ssid::Ssid ()
|
||||
@@ -92,17 +90,6 @@ Ssid::IsBroadcast (void) const
|
||||
}
|
||||
return false;
|
||||
}
|
||||
uint32_t
|
||||
Ssid::GetLength (void) const
|
||||
{
|
||||
uint8_t size = 0;
|
||||
while (m_ssid[size] != 0 && size < 32)
|
||||
{
|
||||
size++;
|
||||
}
|
||||
NS_ASSERT (size <= 32);
|
||||
return size;
|
||||
}
|
||||
|
||||
char *
|
||||
Ssid::PeekString (void) const
|
||||
@@ -112,30 +99,32 @@ Ssid::PeekString (void) const
|
||||
return (char *)m_ssid;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Ssid::GetSerializedSize (void) const
|
||||
WifiInformationElementId
|
||||
Ssid::ElementId () const
|
||||
{
|
||||
return 1 + 1 + m_length;
|
||||
return IE_SSID;
|
||||
}
|
||||
Buffer::Iterator
|
||||
Ssid::Serialize (Buffer::Iterator i) const
|
||||
|
||||
uint8_t
|
||||
Ssid::GetInformationSize () const
|
||||
{
|
||||
return m_length;
|
||||
}
|
||||
|
||||
void
|
||||
Ssid::SerializeInformation (Buffer::Iterator start) const
|
||||
{
|
||||
NS_ASSERT (m_length <= 32);
|
||||
i.WriteU8 (ELEMENT_ID);
|
||||
i.WriteU8 (m_length);
|
||||
i.Write (m_ssid, m_length);
|
||||
return i;
|
||||
start.Write (m_ssid, m_length);
|
||||
}
|
||||
Buffer::Iterator
|
||||
Ssid::Deserialize (Buffer::Iterator i)
|
||||
uint8_t
|
||||
Ssid::DeserializeInformation (Buffer::Iterator start,
|
||||
uint8_t length)
|
||||
{
|
||||
uint8_t elementId;
|
||||
elementId = i.ReadU8 ();
|
||||
NS_ASSERT (elementId == ELEMENT_ID);
|
||||
m_length = i.ReadU8 ();
|
||||
m_length = length;
|
||||
NS_ASSERT (m_length <= 32);
|
||||
i.Read (m_ssid, m_length);
|
||||
return i;
|
||||
start.Read (m_ssid, m_length);
|
||||
return length;
|
||||
}
|
||||
|
||||
ATTRIBUTE_HELPER_CPP (Ssid);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <stdint.h>
|
||||
#include "ns3/buffer.h"
|
||||
#include "ns3/attribute-helper.h"
|
||||
#include "ns3/wifi-information-element.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -30,7 +31,7 @@ namespace ns3 {
|
||||
* \brief a IEEE 802.11 SSID
|
||||
*
|
||||
*/
|
||||
class Ssid
|
||||
class Ssid : public WifiInformationElement
|
||||
{
|
||||
public:
|
||||
// broadcast ssid
|
||||
@@ -41,12 +42,13 @@ public:
|
||||
bool IsEqual (const Ssid& o) const;
|
||||
bool IsBroadcast (void) const;
|
||||
|
||||
uint32_t GetLength (void) const;
|
||||
char *PeekString (void) const;
|
||||
|
||||
uint32_t GetSerializedSize (void) const;
|
||||
Buffer::Iterator Serialize (Buffer::Iterator i) const;
|
||||
Buffer::Iterator Deserialize (Buffer::Iterator i);
|
||||
WifiInformationElementId ElementId () const;
|
||||
uint8_t GetInformationSize () const;
|
||||
void SerializeInformation (Buffer::Iterator start) const;
|
||||
uint8_t DeserializeInformation (Buffer::Iterator start,
|
||||
uint8_t length);
|
||||
|
||||
private:
|
||||
uint8_t m_ssid[33];
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE ("SupportedRates");
|
||||
|
||||
#define ELEMENT_ID (1)
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
SupportedRates::SupportedRates ()
|
||||
@@ -101,29 +99,30 @@ SupportedRates::GetRate (uint8_t i) const
|
||||
{
|
||||
return (m_rates[i]&0x7f) * 500000;
|
||||
}
|
||||
uint32_t
|
||||
SupportedRates::GetSerializedSize (void) const
|
||||
|
||||
WifiInformationElementId
|
||||
SupportedRates::ElementId () const
|
||||
{
|
||||
return m_nRates + 1 + 1;
|
||||
return IE_SUPPORTED_RATES;
|
||||
}
|
||||
Buffer::Iterator
|
||||
SupportedRates::Serialize (Buffer::Iterator start) const
|
||||
uint8_t
|
||||
SupportedRates::GetInformationSize () const
|
||||
{
|
||||
return m_nRates;
|
||||
}
|
||||
void
|
||||
SupportedRates::SerializeInformation (Buffer::Iterator start) const
|
||||
{
|
||||
start.WriteU8 (ELEMENT_ID);
|
||||
start.WriteU8 (m_nRates);
|
||||
start.Write (m_rates, m_nRates);
|
||||
return start;
|
||||
}
|
||||
Buffer::Iterator
|
||||
SupportedRates::Deserialize (Buffer::Iterator start)
|
||||
uint8_t
|
||||
SupportedRates::DeserializeInformation (Buffer::Iterator start,
|
||||
uint8_t length)
|
||||
{
|
||||
uint8_t elementId;
|
||||
elementId = start.ReadU8 ();
|
||||
NS_ASSERT (elementId == ELEMENT_ID);
|
||||
m_nRates = start.ReadU8 ();
|
||||
NS_ASSERT (m_nRates <= 8);
|
||||
NS_ASSERT (length <= 8);
|
||||
m_nRates = length;
|
||||
start.Read (m_rates, m_nRates);
|
||||
return start;
|
||||
return m_nRates;
|
||||
}
|
||||
|
||||
std::ostream &operator << (std::ostream &os, const SupportedRates &rates)
|
||||
|
||||
@@ -23,10 +23,11 @@
|
||||
#include <stdint.h>
|
||||
#include <ostream>
|
||||
#include "ns3/buffer.h"
|
||||
#include "ns3/wifi-information-element.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class SupportedRates {
|
||||
class SupportedRates : public WifiInformationElement {
|
||||
public:
|
||||
SupportedRates ();
|
||||
|
||||
@@ -39,9 +40,11 @@ public:
|
||||
uint8_t GetNRates (void) const;
|
||||
uint32_t GetRate (uint8_t i) const;
|
||||
|
||||
uint32_t GetSerializedSize (void) const;
|
||||
Buffer::Iterator Serialize (Buffer::Iterator start) const;
|
||||
Buffer::Iterator Deserialize (Buffer::Iterator start);
|
||||
WifiInformationElementId ElementId () const;
|
||||
uint8_t GetInformationSize () const;
|
||||
void SerializeInformation (Buffer::Iterator start) const;
|
||||
uint8_t DeserializeInformation (Buffer::Iterator start,
|
||||
uint8_t length);
|
||||
private:
|
||||
uint8_t m_nRates;
|
||||
uint8_t m_rates[8];
|
||||
|
||||
Reference in New Issue
Block a user