Bug 881: Make Ssid and SupportedRates derive from WifiInformationElement
authorDean Armstrong <deanarm@gmail.com>
Tue, 22 Jun 2010 12:05:08 +0100
changeset 6381 cbc1b93b298a
parent 6380 650233cda60e
child 6382 9e5768e48981
Bug 881: Make Ssid and SupportedRates derive from WifiInformationElement
src/devices/mesh/dot11s/peer-link-frame.cc
src/devices/wifi/mgt-headers.cc
src/devices/wifi/ssid.cc
src/devices/wifi/ssid.h
src/devices/wifi/supported-rates.cc
src/devices/wifi/supported-rates.h
--- a/src/devices/mesh/dot11s/peer-link-frame.cc	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/mesh/dot11s/peer-link-frame.cc	Tue Jun 22 12:05:08 2010 +0100
@@ -151,7 +151,7 @@
     }
   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 @@
     }
   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)
     {
--- a/src/devices/wifi/mgt-headers.cc	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/wifi/mgt-headers.cc	Tue Jun 22 12:05:08 2010 +0100
@@ -87,15 +87,15 @@
 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 @@
   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 @@
   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 @@
   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 @@
   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 @@
   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 @@
   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);
 }
 /**********************************************************
--- a/src/devices/wifi/ssid.cc	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/wifi/ssid.cc	Tue Jun 22 12:05:08 2010 +0100
@@ -20,8 +20,6 @@
 #include "ssid.h"
 #include "ns3/assert.h"
 
-#define ELEMENT_ID (0)
-
 namespace ns3 {
 
 Ssid::Ssid ()
@@ -92,17 +90,6 @@
     }
   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 @@
   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);
--- a/src/devices/wifi/ssid.h	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/wifi/ssid.h	Tue Jun 22 12:05:08 2010 +0100
@@ -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 @@
  * \brief a IEEE 802.11 SSID
  *
  */
-class Ssid 
+class Ssid : public WifiInformationElement
 {
 public:
   // broadcast ssid
@@ -41,12 +42,13 @@
   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];
--- a/src/devices/wifi/supported-rates.cc	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/wifi/supported-rates.cc	Tue Jun 22 12:05:08 2010 +0100
@@ -24,8 +24,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("SupportedRates");
 
-#define ELEMENT_ID (1)
-
 namespace ns3 {
 
 SupportedRates::SupportedRates ()
@@ -101,29 +99,30 @@
 {
   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
 {
-  start.WriteU8 (ELEMENT_ID);
-  start.WriteU8 (m_nRates);
+  return m_nRates;
+}
+void
+SupportedRates::SerializeInformation (Buffer::Iterator start) const
+{
   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)
--- a/src/devices/wifi/supported-rates.h	Tue Jun 22 11:59:26 2010 +0100
+++ b/src/devices/wifi/supported-rates.h	Tue Jun 22 12:05:08 2010 +0100
@@ -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 @@
   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];