Bug 881: Make Ssid and SupportedRates derive from WifiInformationElement

This commit is contained in:
Dean Armstrong
2010-06-22 12:05:08 +01:00
parent ec753ce95d
commit 28e92f93c1
6 changed files with 66 additions and 73 deletions

View File

@@ -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)
{

View File

@@ -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);
}
/**********************************************************

View File

@@ -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);

View File

@@ -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];

View File

@@ -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)

View File

@@ -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];