diff --git a/src/devices/mesh/dot11s/peer-link-frame.cc b/src/devices/mesh/dot11s/peer-link-frame.cc index b0769ddee..00a3d6922 100644 --- a/src/devices/mesh/dot11s/peer-link-frame.cc +++ b/src/devices/mesh/dot11s/peer-link-frame.cc @@ -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) { diff --git a/src/devices/wifi/mgt-headers.cc b/src/devices/wifi/mgt-headers.cc index cbf531dba..e3e9d931c 100644 --- a/src/devices/wifi/mgt-headers.cc +++ b/src/devices/wifi/mgt-headers.cc @@ -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); } /********************************************************** diff --git a/src/devices/wifi/ssid.cc b/src/devices/wifi/ssid.cc index fc27fc61b..ec4d617af 100644 --- a/src/devices/wifi/ssid.cc +++ b/src/devices/wifi/ssid.cc @@ -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); diff --git a/src/devices/wifi/ssid.h b/src/devices/wifi/ssid.h index bc0bf3e63..070ea1913 100644 --- a/src/devices/wifi/ssid.h +++ b/src/devices/wifi/ssid.h @@ -23,6 +23,7 @@ #include #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]; diff --git a/src/devices/wifi/supported-rates.cc b/src/devices/wifi/supported-rates.cc index 30edb9080..db55524b0 100644 --- a/src/devices/wifi/supported-rates.cc +++ b/src/devices/wifi/supported-rates.cc @@ -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) diff --git a/src/devices/wifi/supported-rates.h b/src/devices/wifi/supported-rates.h index 0e52cbe50..4cee0d6a2 100644 --- a/src/devices/wifi/supported-rates.h +++ b/src/devices/wifi/supported-rates.h @@ -23,10 +23,11 @@ #include #include #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];