From def20b027656f18b73067f499bddeb0bbaa09bbc Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Wed, 13 Jul 2022 15:56:30 +0200 Subject: [PATCH] wifi: Use 16 bits to represent the size of Information fields ...to support fragmentation of IEs that do not fit in 254/255 bytes --- .../model/dot11s/ie-dot11s-beacon-timing.cc | 6 ++-- .../model/dot11s/ie-dot11s-beacon-timing.h | 4 +-- .../model/dot11s/ie-dot11s-configuration.cc | 6 ++-- .../model/dot11s/ie-dot11s-configuration.h | 4 +-- src/mesh/model/dot11s/ie-dot11s-id.cc | 6 ++-- src/mesh/model/dot11s/ie-dot11s-id.h | 4 +-- .../model/dot11s/ie-dot11s-metric-report.cc | 6 ++-- .../model/dot11s/ie-dot11s-metric-report.h | 4 +-- .../model/dot11s/ie-dot11s-peer-management.cc | 6 ++-- .../model/dot11s/ie-dot11s-peer-management.h | 4 +-- .../dot11s/ie-dot11s-peering-protocol.cc | 6 ++-- .../model/dot11s/ie-dot11s-peering-protocol.h | 4 +-- src/mesh/model/dot11s/ie-dot11s-perr.cc | 8 ++--- src/mesh/model/dot11s/ie-dot11s-perr.h | 4 +-- src/mesh/model/dot11s/ie-dot11s-prep.cc | 6 ++-- src/mesh/model/dot11s/ie-dot11s-prep.h | 4 +-- src/mesh/model/dot11s/ie-dot11s-preq.cc | 8 ++--- src/mesh/model/dot11s/ie-dot11s-preq.h | 4 +-- src/mesh/model/dot11s/ie-dot11s-rann.cc | 8 ++--- src/mesh/model/dot11s/ie-dot11s-rann.h | 4 +-- src/wifi/model/edca-parameter-set.cc | 6 ++-- src/wifi/model/edca-parameter-set.h | 7 ++-- src/wifi/model/eht/eht-capabilities.cc | 6 ++-- src/wifi/model/eht/eht-capabilities.h | 7 ++-- src/wifi/model/eht/multi-link-element.cc | 20 +++++------ src/wifi/model/eht/multi-link-element.h | 8 ++--- src/wifi/model/extended-capabilities.cc | 6 ++-- src/wifi/model/extended-capabilities.h | 6 ++-- src/wifi/model/he/he-capabilities.cc | 6 ++-- src/wifi/model/he/he-capabilities.h | 7 ++-- src/wifi/model/he/he-operation.cc | 6 ++-- src/wifi/model/he/he-operation.h | 7 ++-- src/wifi/model/he/mu-edca-parameter-set.cc | 6 ++-- src/wifi/model/he/mu-edca-parameter-set.h | 35 ++++--------------- src/wifi/model/ht/ht-capabilities.cc | 6 ++-- src/wifi/model/ht/ht-capabilities.h | 9 ++--- src/wifi/model/ht/ht-operation.cc | 6 ++-- src/wifi/model/ht/ht-operation.h | 9 ++--- src/wifi/model/non-ht/dsss-parameter-set.cc | 6 ++-- src/wifi/model/non-ht/dsss-parameter-set.h | 7 ++-- src/wifi/model/non-ht/erp-information.cc | 6 ++-- src/wifi/model/non-ht/erp-information.h | 6 ++-- src/wifi/model/reduced-neighbor-report.cc | 10 +++--- src/wifi/model/reduced-neighbor-report.h | 4 +-- src/wifi/model/ssid.cc | 6 ++-- src/wifi/model/ssid.h | 9 ++--- src/wifi/model/supported-rates.cc | 12 +++---- src/wifi/model/supported-rates.h | 20 ++++++----- src/wifi/model/vht/vht-capabilities.cc | 6 ++-- src/wifi/model/vht/vht-capabilities.h | 7 ++-- src/wifi/model/vht/vht-operation.cc | 6 ++-- src/wifi/model/vht/vht-operation.h | 7 ++-- src/wifi/model/wifi-information-element.cc | 2 +- src/wifi/model/wifi-information-element.h | 8 ++--- 54 files changed, 191 insertions(+), 200 deletions(-) diff --git a/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc b/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc index 886355795..c15427aed 100644 --- a/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc +++ b/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc @@ -122,7 +122,7 @@ IeBeaconTiming::ClearTimingElement () } m_neighbours.clear (); } -uint8_t +uint16_t IeBeaconTiming::GetInformationFieldSize () const { return (5 * m_numOfUnits ); @@ -148,8 +148,8 @@ IeBeaconTiming::SerializeInformationField (Buffer::Iterator i) const i.WriteHtolsbU16 ((*j)->GetBeaconInterval ()); } } -uint8_t -IeBeaconTiming::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IeBeaconTiming::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_numOfUnits = length / 5; diff --git a/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h b/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h index 53edd1cae..32476008c 100644 --- a/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h +++ b/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h @@ -131,9 +131,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator i, uint16_t length); virtual void Print (std::ostream& os) const; /** diff --git a/src/mesh/model/dot11s/ie-dot11s-configuration.cc b/src/mesh/model/dot11s/ie-dot11s-configuration.cc index b70112e78..ad29f83cf 100644 --- a/src/mesh/model/dot11s/ie-dot11s-configuration.cc +++ b/src/mesh/model/dot11s/ie-dot11s-configuration.cc @@ -104,7 +104,7 @@ IeConfiguration::IeConfiguration () : SYNC_NEIGHBOUR_OFFSET), m_APId (AUTH_NULL), m_neighbors (0) { } -uint8_t +uint16_t IeConfiguration::GetInformationFieldSize () const { return 0 // Version @@ -132,8 +132,8 @@ IeConfiguration::SerializeInformationField (Buffer::Iterator i) const i.WriteU8 (m_neighbors << 1); m_meshCap.Serialize (i); } -uint8_t -IeConfiguration::DeserializeInformationField (Buffer::Iterator i, uint8_t length) +uint16_t +IeConfiguration::DeserializeInformationField (Buffer::Iterator i, uint16_t length) { Buffer::Iterator start = i; // Active Path Selection Protocol ID: diff --git a/src/mesh/model/dot11s/ie-dot11s-configuration.h b/src/mesh/model/dot11s/ie-dot11s-configuration.h index 624624754..2aed0906b 100644 --- a/src/mesh/model/dot11s/ie-dot11s-configuration.h +++ b/src/mesh/model/dot11s/ie-dot11s-configuration.h @@ -168,9 +168,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator i, uint16_t length); virtual void Print (std::ostream& os) const; private: diff --git a/src/mesh/model/dot11s/ie-dot11s-id.cc b/src/mesh/model/dot11s/ie-dot11s-id.cc index 97afe20a2..6b984b232 100644 --- a/src/mesh/model/dot11s/ie-dot11s-id.cc +++ b/src/mesh/model/dot11s/ie-dot11s-id.cc @@ -82,7 +82,7 @@ IeMeshId::PeekString (void) const { return (char *) m_meshId; } -uint8_t +uint16_t IeMeshId::GetInformationFieldSize (void) const { uint8_t size = 0; @@ -103,8 +103,8 @@ IeMeshId::SerializeInformationField (Buffer::Iterator i) const size++; } } -uint8_t -IeMeshId::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IeMeshId::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; NS_ASSERT (length <= 32); diff --git a/src/mesh/model/dot11s/ie-dot11s-id.h b/src/mesh/model/dot11s/ie-dot11s-id.h index b10e53642..2988bef9f 100644 --- a/src/mesh/model/dot11s/ie-dot11s-id.h +++ b/src/mesh/model/dot11s/ie-dot11s-id.h @@ -65,9 +65,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length); virtual void Print (std::ostream& os) const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; private: uint8_t m_meshId[33]; ///< mesh ID diff --git a/src/mesh/model/dot11s/ie-dot11s-metric-report.cc b/src/mesh/model/dot11s/ie-dot11s-metric-report.cc index 231f54d3c..2b42f7494 100644 --- a/src/mesh/model/dot11s/ie-dot11s-metric-report.cc +++ b/src/mesh/model/dot11s/ie-dot11s-metric-report.cc @@ -36,7 +36,7 @@ IeLinkMetricReport::ElementId () const { return IE_MESH_LINK_METRIC_REPORT; } -uint8_t +uint16_t IeLinkMetricReport::GetInformationFieldSize (void) const { return sizeof (uint32_t); @@ -56,8 +56,8 @@ IeLinkMetricReport::SerializeInformationField (Buffer::Iterator i) const { i.WriteHtolsbU32 (m_metric); } -uint8_t -IeLinkMetricReport::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IeLinkMetricReport::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_metric = i.ReadLsbtohU32 (); diff --git a/src/mesh/model/dot11s/ie-dot11s-metric-report.h b/src/mesh/model/dot11s/ie-dot11s-metric-report.h index 025125254..df8499008 100644 --- a/src/mesh/model/dot11s/ie-dot11s-metric-report.h +++ b/src/mesh/model/dot11s/ie-dot11s-metric-report.h @@ -55,9 +55,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length); virtual void Print (std::ostream& os) const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; private: uint32_t m_metric; ///< metric diff --git a/src/mesh/model/dot11s/ie-dot11s-peer-management.cc b/src/mesh/model/dot11s/ie-dot11s-peer-management.cc index 903b2c614..77ff0e2e0 100644 --- a/src/mesh/model/dot11s/ie-dot11s-peer-management.cc +++ b/src/mesh/model/dot11s/ie-dot11s-peer-management.cc @@ -79,7 +79,7 @@ IePeerManagement::GetPeerLinkId () const return m_peerLinkId; } -uint8_t +uint16_t IePeerManagement::GetInformationFieldSize (void) const { return m_length; @@ -119,8 +119,8 @@ IePeerManagement::SerializeInformationField (Buffer::Iterator i) const i.WriteHtolsbU16 (m_reasonCode); } } -uint8_t -IePeerManagement::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IePeerManagement::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_subtype = i.ReadU8 (); diff --git a/src/mesh/model/dot11s/ie-dot11s-peer-management.h b/src/mesh/model/dot11s/ie-dot11s-peer-management.h index c28980dde..05d4d1a20 100644 --- a/src/mesh/model/dot11s/ie-dot11s-peer-management.h +++ b/src/mesh/model/dot11s/ie-dot11s-peer-management.h @@ -115,9 +115,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; - virtual uint8_t GetInformationFieldSize (void) const; + virtual uint16_t GetInformationFieldSize (void) const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator i, uint16_t length); virtual void Print (std::ostream& os) const; private: diff --git a/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc b/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc index aa140a791..76d76d57f 100644 --- a/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc +++ b/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc @@ -21,7 +21,7 @@ #include "ie-dot11s-peering-protocol.h" namespace ns3 { namespace dot11s { -uint8_t +uint16_t IePeeringProtocol::GetInformationFieldSize () const { return 1; @@ -40,8 +40,8 @@ IePeeringProtocol::SerializeInformationField (Buffer::Iterator i) const { i.WriteU8 (m_protocol); } -uint8_t -IePeeringProtocol::DeserializeInformationField (Buffer::Iterator i, uint8_t length) +uint16_t +IePeeringProtocol::DeserializeInformationField (Buffer::Iterator i, uint16_t length) { Buffer::Iterator start = i; m_protocol = i.ReadU8 (); diff --git a/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h b/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h index 3c4c51099..fedcb4374 100644 --- a/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h +++ b/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h @@ -42,9 +42,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator i, uint16_t length); virtual void Print (std::ostream& os) const; private: diff --git a/src/mesh/model/dot11s/ie-dot11s-perr.cc b/src/mesh/model/dot11s/ie-dot11s-perr.cc index 174efcb54..aefed40ff 100644 --- a/src/mesh/model/dot11s/ie-dot11s-perr.cc +++ b/src/mesh/model/dot11s/ie-dot11s-perr.cc @@ -64,8 +64,8 @@ IePerr::SerializeInformationField (Buffer::Iterator i) const i.WriteU8 (0); } } -uint8_t -IePerr::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IePerr::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; i.Next (1); //TTL //Mode flags is not used now @@ -84,10 +84,10 @@ IePerr::DeserializeInformationField (Buffer::Iterator start, uint8_t length) return i.GetDistanceFrom (start); } -uint8_t +uint16_t IePerr::GetInformationFieldSize () const { - uint8_t retval = 1 //TTL //ModeFlags + uint16_t retval = 1 //TTL //ModeFlags + 1 //NumOfDests + 1 * m_addressUnits.size () //ModeFlags + (6 + 4) * m_addressUnits.size () diff --git a/src/mesh/model/dot11s/ie-dot11s-perr.h b/src/mesh/model/dot11s/ie-dot11s-perr.h index f58613746..6615890be 100644 --- a/src/mesh/model/dot11s/ie-dot11s-perr.h +++ b/src/mesh/model/dot11s/ie-dot11s-perr.h @@ -67,9 +67,9 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length); virtual void Print (std::ostream& os) const; - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t GetInformationFieldSize () const; private: std::vector m_addressUnits; ///< address units diff --git a/src/mesh/model/dot11s/ie-dot11s-prep.cc b/src/mesh/model/dot11s/ie-dot11s-prep.cc index 6b60ae2f6..e5d8be471 100644 --- a/src/mesh/model/dot11s/ie-dot11s-prep.cc +++ b/src/mesh/model/dot11s/ie-dot11s-prep.cc @@ -157,8 +157,8 @@ IePrep::SerializeInformationField (Buffer::Iterator i) const WriteTo (i, m_originatorAddress); i.WriteHtolsbU32 (m_originatorSeqNumber); } -uint8_t -IePrep::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IePrep::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_flags = i.ReadU8 (); @@ -172,7 +172,7 @@ IePrep::DeserializeInformationField (Buffer::Iterator start, uint8_t length) m_originatorSeqNumber = i.ReadLsbtohU32 (); return i.GetDistanceFrom (start); } -uint8_t +uint16_t IePrep::GetInformationFieldSize () const { uint32_t retval = 1 //Flags diff --git a/src/mesh/model/dot11s/ie-dot11s-prep.h b/src/mesh/model/dot11s/ie-dot11s-prep.h index 33b2f6124..651da0f09 100644 --- a/src/mesh/model/dot11s/ie-dot11s-prep.h +++ b/src/mesh/model/dot11s/ie-dot11s-prep.h @@ -138,8 +138,8 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length); + virtual uint16_t GetInformationFieldSize () const; virtual void Print (std::ostream& os) const; private: diff --git a/src/mesh/model/dot11s/ie-dot11s-preq.cc b/src/mesh/model/dot11s/ie-dot11s-preq.cc index 1edf41b04..d28d71ba5 100644 --- a/src/mesh/model/dot11s/ie-dot11s-preq.cc +++ b/src/mesh/model/dot11s/ie-dot11s-preq.cc @@ -249,8 +249,8 @@ IePreq::SerializeInformationField (Buffer::Iterator i) const } } } -uint8_t -IePreq::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IePreq::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_flags = i.ReadU8 (); @@ -291,10 +291,10 @@ IePreq::DeserializeInformationField (Buffer::Iterator start, uint8_t length) } return i.GetDistanceFrom (start); } -uint8_t +uint16_t IePreq::GetInformationFieldSize () const { - uint8_t retval = 1 //Flags + uint16_t retval = 1 //Flags + 1 //Hopcount + 1 //TTL + 4 //PREQ ID diff --git a/src/mesh/model/dot11s/ie-dot11s-preq.h b/src/mesh/model/dot11s/ie-dot11s-preq.h index 2ed6f5b5f..5bc628dfe 100644 --- a/src/mesh/model/dot11s/ie-dot11s-preq.h +++ b/src/mesh/model/dot11s/ie-dot11s-preq.h @@ -256,8 +256,8 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length); - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t DeserializeInformationField (Buffer::Iterator i, uint16_t length); + virtual uint16_t GetInformationFieldSize () const; virtual void Print (std::ostream& os) const; private: diff --git a/src/mesh/model/dot11s/ie-dot11s-rann.cc b/src/mesh/model/dot11s/ie-dot11s-rann.cc index 328e7fabe..127e6ab62 100644 --- a/src/mesh/model/dot11s/ie-dot11s-rann.cc +++ b/src/mesh/model/dot11s/ie-dot11s-rann.cc @@ -124,8 +124,8 @@ IeRann::SerializeInformationField (Buffer::Iterator i) const i.WriteHtolsbU32 (m_destSeqNumber); i.WriteHtolsbU32 (m_metric); } -uint8_t -IeRann::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +IeRann::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_flags = i.ReadU8 (); @@ -136,10 +136,10 @@ IeRann::DeserializeInformationField (Buffer::Iterator start, uint8_t length) m_metric = i.ReadLsbtohU32 (); return i.GetDistanceFrom (start); } -uint8_t +uint16_t IeRann::GetInformationFieldSize () const { - uint8_t retval = 1 //Flags + uint16_t retval = 1 //Flags + 1 //Hopcount + 1 //TTL + 6 //OriginatorAddress diff --git a/src/mesh/model/dot11s/ie-dot11s-rann.h b/src/mesh/model/dot11s/ie-dot11s-rann.h index 1e88dfaef..936e67f42 100644 --- a/src/mesh/model/dot11s/ie-dot11s-rann.h +++ b/src/mesh/model/dot11s/ie-dot11s-rann.h @@ -108,8 +108,8 @@ public: // Inherited from WifiInformationElement virtual WifiInformationElementId ElementId () const; virtual void SerializeInformationField (Buffer::Iterator i) const; - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); - virtual uint8_t GetInformationFieldSize () const; + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length); + virtual uint16_t GetInformationFieldSize () const; virtual void Print (std::ostream &os) const; private: diff --git a/src/wifi/model/edca-parameter-set.cc b/src/wifi/model/edca-parameter-set.cc index af027e8cb..164230f52 100644 --- a/src/wifi/model/edca-parameter-set.cc +++ b/src/wifi/model/edca-parameter-set.cc @@ -283,7 +283,7 @@ EdcaParameterSet::GetVoTxopLimit (void) const return (m_acVO >> 16); } -uint8_t +uint16_t EdcaParameterSet::GetInformationFieldSize () const { return 18; @@ -300,8 +300,8 @@ EdcaParameterSet::SerializeInformationField (Buffer::Iterator start) const start.WriteU32 (m_acVO); } -uint8_t -EdcaParameterSet::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +EdcaParameterSet::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_qosInfo = i.ReadU8 (); diff --git a/src/wifi/model/edca-parameter-set.h b/src/wifi/model/edca-parameter-set.h index da90b5a68..c3ee2371d 100644 --- a/src/wifi/model/edca-parameter-set.h +++ b/src/wifi/model/edca-parameter-set.h @@ -38,9 +38,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the QoS Info field in the EdcaParameterSet information element. @@ -274,6 +271,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + uint8_t m_qosInfo; ///< QOS info uint8_t m_reserved; ///< reserved uint32_t m_acBE; ///< AC_BE diff --git a/src/wifi/model/eht/eht-capabilities.cc b/src/wifi/model/eht/eht-capabilities.cc index 89e4cbf27..8d8b0fdac 100644 --- a/src/wifi/model/eht/eht-capabilities.cc +++ b/src/wifi/model/eht/eht-capabilities.cc @@ -38,7 +38,7 @@ EhtCapabilities::ElementIdExt () const return IE_EXT_EHT_CAPABILITIES; } -uint8_t +uint16_t EhtCapabilities::GetInformationFieldSize () const { return 1; //FIXME @@ -50,8 +50,8 @@ EhtCapabilities::SerializeInformationField (Buffer::Iterator start) const //TODO } -uint8_t -EhtCapabilities::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +EhtCapabilities::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { //TODO return length; diff --git a/src/wifi/model/eht/eht-capabilities.h b/src/wifi/model/eht/eht-capabilities.h index 563295cb1..2a3217fd5 100644 --- a/src/wifi/model/eht/eht-capabilities.h +++ b/src/wifi/model/eht/eht-capabilities.h @@ -37,11 +37,12 @@ public: // Implementations of pure virtual methods, or overridden from base class. WifiInformationElementId ElementId () const override; WifiInformationElementId ElementIdExt () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + //TODO: add fields }; diff --git a/src/wifi/model/eht/multi-link-element.cc b/src/wifi/model/eht/multi-link-element.cc index 6448d4d67..77aa1228e 100644 --- a/src/wifi/model/eht/multi-link-element.cc +++ b/src/wifi/model/eht/multi-link-element.cc @@ -518,10 +518,10 @@ MultiLinkElement::PerStaProfileSubelement::ElementId () const return PER_STA_PROFILE_SUBELEMENT_ID; } -uint8_t +uint16_t MultiLinkElement::PerStaProfileSubelement::GetInformationFieldSize (void) const { - uint8_t ret = 2; // STA Control field + uint16_t ret = 2; // STA Control field ret += GetStaInfoLength (); @@ -550,11 +550,11 @@ MultiLinkElement::PerStaProfileSubelement::SerializeInformationField (Buffer::It } } -uint8_t -MultiLinkElement::PerStaProfileSubelement::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +MultiLinkElement::PerStaProfileSubelement::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; - uint8_t count = 0; + uint16_t count = 0; m_staControl = i.ReadLsbtohU16 (); count += 2; @@ -622,10 +622,10 @@ MultiLinkElement::GetPerStaProfile (std::size_t i) const return m_perStaProfileSubelements.at (i); } -uint8_t +uint16_t MultiLinkElement::GetInformationFieldSize () const { - uint8_t ret = 3; // ElementIdExt (1) + Multi-Link Control (2) + uint16_t ret = 3; // ElementIdExt (1) + Multi-Link Control (2) // add the Common Info field size (dependent on the Multi-Link Element variant) ret += std::visit ([](auto&& arg) -> uint8_t @@ -676,11 +676,11 @@ MultiLinkElement::SerializeInformationField (Buffer::Iterator start) const } } -uint8_t -MultiLinkElement::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +MultiLinkElement::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; - uint8_t count = 0; + uint16_t count = 0; uint16_t mlControl = i.ReadLsbtohU16 (); count += 2; diff --git a/src/wifi/model/eht/multi-link-element.h b/src/wifi/model/eht/multi-link-element.h index 757362c78..e2b39fd90 100644 --- a/src/wifi/model/eht/multi-link-element.h +++ b/src/wifi/model/eht/multi-link-element.h @@ -178,9 +178,9 @@ public: WifiInformationElementId ElementId () const override; WifiInformationElementId ElementIdExt () const override; - uint8_t GetInformationFieldSize () const override; + uint16_t GetInformationFieldSize () const override; void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; /** * Get the Multi-Link element variant @@ -460,9 +460,9 @@ public: uint8_t GetStaInfoLength (void) const; private: - uint8_t GetInformationFieldSize () const override; + uint16_t GetInformationFieldSize () const override; void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; Variant m_variant; //!< Multi-Link element variant WifiMacType m_frameType; //!< type of the frame containing the Multi-Link Element diff --git a/src/wifi/model/extended-capabilities.cc b/src/wifi/model/extended-capabilities.cc index 6e48f6844..f42e4179a 100644 --- a/src/wifi/model/extended-capabilities.cc +++ b/src/wifi/model/extended-capabilities.cc @@ -103,7 +103,7 @@ ExtendedCapabilities::SetVhtSupported (uint8_t vhtSupported) m_vhtSupported = vhtSupported; } -uint8_t +uint16_t ExtendedCapabilities::GetInformationFieldSize () const { //we should not be here if it is not supported @@ -347,8 +347,8 @@ ExtendedCapabilities::SerializeInformationField (Buffer::Iterator start) const } } -uint8_t -ExtendedCapabilities::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +ExtendedCapabilities::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; uint8_t byte1 = i.ReadU8 (); diff --git a/src/wifi/model/extended-capabilities.h b/src/wifi/model/extended-capabilities.h index 00cd03dd7..84db6ab99 100644 --- a/src/wifi/model/extended-capabilities.h +++ b/src/wifi/model/extended-capabilities.h @@ -38,10 +38,10 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; + uint16_t GetInformationFieldSize () const override; void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; /** * Set the HT Supported flag. * diff --git a/src/wifi/model/he/he-capabilities.cc b/src/wifi/model/he/he-capabilities.cc index 9cb89e811..1f9060017 100644 --- a/src/wifi/model/he/he-capabilities.cc +++ b/src/wifi/model/he/he-capabilities.cc @@ -135,7 +135,7 @@ HeCapabilities::ElementIdExt () const return IE_EXT_HE_CAPABILITIES; } -uint8_t +uint16_t HeCapabilities::GetInformationFieldSize () const { // IEEE 802.11ax-2021 9.4.2.248 HE Capabilities element @@ -160,8 +160,8 @@ HeCapabilities::SerializeInformationField (Buffer::Iterator start) const // TODO: optional PPE Threshold field (variable length) } -uint8_t -HeCapabilities::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +HeCapabilities::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; uint32_t macCapabilities1 = i.ReadLsbtohU32 (); diff --git a/src/wifi/model/he/he-capabilities.h b/src/wifi/model/he/he-capabilities.h index 76aff478c..2f6ea661a 100644 --- a/src/wifi/model/he/he-capabilities.h +++ b/src/wifi/model/he/he-capabilities.h @@ -38,9 +38,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; WifiInformationElementId ElementIdExt () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the HE MAC Capabilities Info field in the HE Capabilities information element. @@ -210,6 +207,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + // MAC Capabilities Info fields // IEEE 802.11ax-2021 9.4.2.248.2 HE MAC Capabilities Information field uint8_t m_plusHtcHeSupport; //!< HTC HE support diff --git a/src/wifi/model/he/he-operation.cc b/src/wifi/model/he/he-operation.cc index f91a1bd8f..6ec0f3993 100644 --- a/src/wifi/model/he/he-operation.cc +++ b/src/wifi/model/he/he-operation.cc @@ -48,7 +48,7 @@ HeOperation::ElementIdExt () const return IE_EXT_HE_OPERATION; } -uint8_t +uint16_t HeOperation::GetInformationFieldSize () const { return 7; @@ -133,8 +133,8 @@ HeOperation::SerializeInformationField (Buffer::Iterator start) const //todo: VHT Operation Information (variable) } -uint8_t -HeOperation::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +HeOperation::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; uint32_t heOperationParameters = i.ReadLsbtohU32 (); diff --git a/src/wifi/model/he/he-operation.h b/src/wifi/model/he/he-operation.h index 793ced506..724320a34 100644 --- a/src/wifi/model/he/he-operation.h +++ b/src/wifi/model/he/he-operation.h @@ -40,9 +40,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; WifiInformationElementId ElementIdExt () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the HE Operation Parameters field in the HE Operation information element. @@ -84,6 +81,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + //HE Operation Parameters fields uint8_t m_bssColor; //!< BSS color uint8_t m_defaultPEDuration; //!< default PE duration diff --git a/src/wifi/model/he/mu-edca-parameter-set.cc b/src/wifi/model/he/mu-edca-parameter-set.cc index 6ecf51b7a..a4d451503 100644 --- a/src/wifi/model/he/mu-edca-parameter-set.cc +++ b/src/wifi/model/he/mu-edca-parameter-set.cc @@ -132,7 +132,7 @@ MuEdcaParameterSet::GetMuEdcaTimer (uint8_t aci) const return MicroSeconds (m_records[aci].muEdcaTimer * 8192); } -uint8_t +uint16_t MuEdcaParameterSet::GetInformationFieldSize () const { // ElementIdExt (1) + QoS Info (1) + MU Parameter Records (4 * 3) @@ -151,8 +151,8 @@ MuEdcaParameterSet::SerializeInformationField (Buffer::Iterator start) const } } -uint8_t -MuEdcaParameterSet::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +MuEdcaParameterSet::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_qosInfo = i.ReadU8 (); diff --git a/src/wifi/model/he/mu-edca-parameter-set.h b/src/wifi/model/he/mu-edca-parameter-set.h index 67a65ca95..d9dacfe2a 100644 --- a/src/wifi/model/he/mu-edca-parameter-set.h +++ b/src/wifi/model/he/mu-edca-parameter-set.h @@ -38,6 +38,9 @@ class MuEdcaParameterSet : public WifiInformationElement public: MuEdcaParameterSet (); + WifiInformationElementId ElementId () const override; + WifiInformationElementId ElementIdExt () const override; + /** * Set the QoS Info field in the MuEdcaParameterSet information element. * @@ -123,35 +126,11 @@ public: */ Time GetMuEdcaTimer (uint8_t aci) const; - /** - * Get the wifi information element ID - * \return the wifi information element ID - */ - WifiInformationElementId ElementId () const; - /** - * Get the wifi information element ID extension - * \return the wifi information element ID extension - */ - WifiInformationElementId ElementIdExt () const; - /** - * Get information field size function - * \return the information field size - */ - uint8_t GetInformationFieldSize () const; - /** - * Serialize information field function - * \param start the iterator - */ - void SerializeInformationField (Buffer::Iterator start) const; - /** - * Deserialize information field function - * \param start the iterator - * \param length the length - * \return the size - */ - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length); - private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + /** * MU AC Parameter Record type */ diff --git a/src/wifi/model/ht/ht-capabilities.cc b/src/wifi/model/ht/ht-capabilities.cc index a3a5d636c..60857d4d4 100644 --- a/src/wifi/model/ht/ht-capabilities.cc +++ b/src/wifi/model/ht/ht-capabilities.cc @@ -245,7 +245,7 @@ HtCapabilities::GetRxHighestSupportedAntennas (void) const return 4; } -uint8_t +uint16_t HtCapabilities::GetInformationFieldSize () const { return 26; @@ -484,9 +484,9 @@ HtCapabilities::SerializeInformationField (Buffer::Iterator start) const start.WriteU8 (GetAntennaSelectionCapabilities ()); } -uint8_t +uint16_t HtCapabilities::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { Buffer::Iterator i = start; uint16_t htinfo = i.ReadLsbtohU16 (); diff --git a/src/wifi/model/ht/ht-capabilities.h b/src/wifi/model/ht/ht-capabilities.h index f967c9b7a..2b382f7e2 100644 --- a/src/wifi/model/ht/ht-capabilities.h +++ b/src/wifi/model/ht/ht-capabilities.h @@ -45,10 +45,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; /** * Set the HT Capabilities Info field in the HT Capabilities information element. @@ -259,6 +255,11 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; + //HT Capabilities Info field uint8_t m_ldpc; ///< LDPC uint8_t m_supportedChannelWidth; ///< supported channel width diff --git a/src/wifi/model/ht/ht-operation.cc b/src/wifi/model/ht/ht-operation.cc index 8891f1a66..8d3907ff6 100644 --- a/src/wifi/model/ht/ht-operation.cc +++ b/src/wifi/model/ht/ht-operation.cc @@ -62,7 +62,7 @@ HtOperation::ElementId () const return IE_HT_OPERATION; } -uint8_t +uint16_t HtOperation::GetInformationFieldSize () const { return 22; @@ -438,9 +438,9 @@ HtOperation::SerializeInformationField (Buffer::Iterator start) const start.WriteHtolsbU64 (GetBasicMcsSet2 ()); } -uint8_t +uint16_t HtOperation::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { Buffer::Iterator i = start; uint8_t primarychannel = i.ReadU8 (); diff --git a/src/wifi/model/ht/ht-operation.h b/src/wifi/model/ht/ht-operation.h index 16d144835..5042a495b 100644 --- a/src/wifi/model/ht/ht-operation.h +++ b/src/wifi/model/ht/ht-operation.h @@ -54,10 +54,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; /** * Set the Primary Channel field in the HT Operation information element. @@ -356,6 +352,11 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; + uint8_t m_primaryChannel; ///< primary channel //HT Information Subset 1 diff --git a/src/wifi/model/non-ht/dsss-parameter-set.cc b/src/wifi/model/non-ht/dsss-parameter-set.cc index ffa6f963c..a93e27a5d 100644 --- a/src/wifi/model/non-ht/dsss-parameter-set.cc +++ b/src/wifi/model/non-ht/dsss-parameter-set.cc @@ -39,7 +39,7 @@ DsssParameterSet::SetCurrentChannel (uint8_t currentChannel) m_currentChannel = currentChannel; } -uint8_t +uint16_t DsssParameterSet::GetInformationFieldSize () const { return 1; @@ -51,8 +51,8 @@ DsssParameterSet::SerializeInformationField (Buffer::Iterator start) const start.WriteU8 (m_currentChannel); } -uint8_t -DsssParameterSet::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +DsssParameterSet::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; m_currentChannel = i.ReadU8 (); diff --git a/src/wifi/model/non-ht/dsss-parameter-set.h b/src/wifi/model/non-ht/dsss-parameter-set.h index 5874afe04..6d147e07e 100644 --- a/src/wifi/model/non-ht/dsss-parameter-set.h +++ b/src/wifi/model/non-ht/dsss-parameter-set.h @@ -38,9 +38,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the Current Channel field in the DsssParameterSet information element. @@ -51,6 +48,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + uint8_t m_currentChannel; ///< current channel number }; diff --git a/src/wifi/model/non-ht/erp-information.cc b/src/wifi/model/non-ht/erp-information.cc index ee6a94690..a76d2662f 100644 --- a/src/wifi/model/non-ht/erp-information.cc +++ b/src/wifi/model/non-ht/erp-information.cc @@ -69,7 +69,7 @@ ErpInformation::GetNonErpPresent (void) const return (m_erpInformation & 0x01); } -uint8_t +uint16_t ErpInformation::GetInformationFieldSize () const { return 1; @@ -81,9 +81,9 @@ ErpInformation::SerializeInformationField (Buffer::Iterator start) const start.WriteU8 (m_erpInformation); } -uint8_t +uint16_t ErpInformation::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { Buffer::Iterator i = start; m_erpInformation = i.ReadU8 (); diff --git a/src/wifi/model/non-ht/erp-information.h b/src/wifi/model/non-ht/erp-information.h index 24a18bd51..6333022c8 100644 --- a/src/wifi/model/non-ht/erp-information.h +++ b/src/wifi/model/non-ht/erp-information.h @@ -38,10 +38,10 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; + uint16_t GetInformationFieldSize () const override; void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; /** * Set the Barker_Preamble_Mode field in the ErpInformation information element. diff --git a/src/wifi/model/reduced-neighbor-report.cc b/src/wifi/model/reduced-neighbor-report.cc index 687dbbd94..9dc3088b2 100644 --- a/src/wifi/model/reduced-neighbor-report.cc +++ b/src/wifi/model/reduced-neighbor-report.cc @@ -586,10 +586,10 @@ ReducedNeighborReport::ReadTbttInformationCount (std::size_t nbrApInfoId) const return 1 + m_nbrApInfoFields.at (nbrApInfoId).tbttInfoHdr.tbttInfoCount; } -uint8_t +uint16_t ReducedNeighborReport::GetInformationFieldSize () const { - uint8_t size = 0; + uint16_t size = 0; for (const auto& neighborApInfo : m_nbrApInfoFields) { @@ -676,11 +676,11 @@ ReducedNeighborReport::SerializeInformationField (Buffer::Iterator start) const } } -uint8_t -ReducedNeighborReport::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +ReducedNeighborReport::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; - uint8_t count = 0; + uint16_t count = 0; while (count < length) { diff --git a/src/wifi/model/reduced-neighbor-report.h b/src/wifi/model/reduced-neighbor-report.h index 227d931d7..7c4ee462e 100644 --- a/src/wifi/model/reduced-neighbor-report.h +++ b/src/wifi/model/reduced-neighbor-report.h @@ -96,9 +96,9 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; + uint16_t GetInformationFieldSize () const override; void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; /** * Get the number of Neighbor AP Information fields diff --git a/src/wifi/model/ssid.cc b/src/wifi/model/ssid.cc index 82d745783..999cacf78 100644 --- a/src/wifi/model/ssid.cc +++ b/src/wifi/model/ssid.cc @@ -92,7 +92,7 @@ Ssid::ElementId () const return IE_SSID; } -uint8_t +uint16_t Ssid::GetInformationFieldSize () const { return m_length; @@ -105,9 +105,9 @@ Ssid::SerializeInformationField (Buffer::Iterator start) const start.Write (m_ssid, m_length); } -uint8_t +uint16_t Ssid::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { m_length = length; NS_ASSERT (m_length <= 32); diff --git a/src/wifi/model/ssid.h b/src/wifi/model/ssid.h index 5988203db..c2c5cbb26 100644 --- a/src/wifi/model/ssid.h +++ b/src/wifi/model/ssid.h @@ -48,10 +48,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; /** * Check if the two SSIDs are equal. @@ -79,6 +75,11 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; + uint8_t m_ssid[33]; //!< Raw SSID value uint8_t m_length; //!< Length of the SSID }; diff --git a/src/wifi/model/supported-rates.cc b/src/wifi/model/supported-rates.cc index 873b44ed5..6908e28e8 100644 --- a/src/wifi/model/supported-rates.cc +++ b/src/wifi/model/supported-rates.cc @@ -179,7 +179,7 @@ SupportedRates::ElementId () const return IE_SUPPORTED_RATES; } -uint8_t +uint16_t SupportedRates::GetInformationFieldSize () const { //The Supported Rates Information Element contains only the first 8 @@ -197,9 +197,9 @@ SupportedRates::SerializeInformationField (Buffer::Iterator start) const start.Write (m_rates, m_nRates > 8 ? 8 : m_nRates); } -uint8_t +uint16_t SupportedRates::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { NS_ASSERT (length <= 8); m_nRates = length; @@ -228,7 +228,7 @@ ExtendedSupportedRatesIE::SetSupportedRates (SupportedRates *sr) m_supportedRates = sr; } -uint8_t +uint16_t ExtendedSupportedRatesIE::GetInformationFieldSize () const { // If there are 8 or fewer rates then we don't need an Extended Supported @@ -251,9 +251,9 @@ ExtendedSupportedRatesIE::SerializeInformationField (Buffer::Iterator start) con start.Write (m_supportedRates->m_rates + 8, m_supportedRates->m_nRates - 8); } -uint8_t +uint16_t ExtendedSupportedRatesIE::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { NS_ASSERT (length > 0); NS_ASSERT (m_supportedRates->m_nRates + length <= SupportedRates::MAX_SUPPORTED_RATES); diff --git a/src/wifi/model/supported-rates.h b/src/wifi/model/supported-rates.h index 9365ad9f4..c10682aa7 100644 --- a/src/wifi/model/supported-rates.h +++ b/src/wifi/model/supported-rates.h @@ -53,10 +53,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) override; /** * Set supported rates. @@ -67,6 +63,11 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; + /** * This member points to the SupportedRates object that contains the * actual rate details. This class is a friend of that, so we have @@ -99,11 +100,7 @@ public: SupportedRates (const SupportedRates & rates); // Implementations of pure virtual methods of WifiInformationElement - WifiInformationElementId ElementId () const; - uint8_t GetInformationFieldSize () const; - void SerializeInformationField (Buffer::Iterator start) const; - uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length); + WifiInformationElementId ElementId () const override; /** * Assignment operator @@ -197,6 +194,11 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) override; + uint8_t m_nRates; //!< Number of supported rates uint8_t m_rates[MAX_SUPPORTED_RATES]; //!< List of supported bit rates (divided by 500000) }; diff --git a/src/wifi/model/vht/vht-capabilities.cc b/src/wifi/model/vht/vht-capabilities.cc index ad709b5f0..1d123d48b 100644 --- a/src/wifi/model/vht/vht-capabilities.cc +++ b/src/wifi/model/vht/vht-capabilities.cc @@ -61,7 +61,7 @@ VhtCapabilities::ElementId () const return IE_VHT_CAPABILITIES; } -uint8_t +uint16_t VhtCapabilities::GetInformationFieldSize () const { return 12; @@ -75,9 +75,9 @@ VhtCapabilities::SerializeInformationField (Buffer::Iterator start) const start.WriteHtolsbU64 (GetSupportedMcsAndNssSet ()); } -uint8_t +uint16_t VhtCapabilities::DeserializeInformationField (Buffer::Iterator start, - uint8_t length) + uint16_t length) { Buffer::Iterator i = start; uint32_t vhtinfo = i.ReadLsbtohU32 (); diff --git a/src/wifi/model/vht/vht-capabilities.h b/src/wifi/model/vht/vht-capabilities.h index b58e63570..33a4580dd 100644 --- a/src/wifi/model/vht/vht-capabilities.h +++ b/src/wifi/model/vht/vht-capabilities.h @@ -38,9 +38,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the VHT Capabilities Info field in the VHT Capabilities information element. @@ -211,6 +208,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + //Capabilities Info fields uint8_t m_maxMpduLength; ///< maximum MPDU length uint8_t m_supportedChannelWidthSet; ///< supported channel width set diff --git a/src/wifi/model/vht/vht-operation.cc b/src/wifi/model/vht/vht-operation.cc index f1346d6a3..51944907d 100644 --- a/src/wifi/model/vht/vht-operation.cc +++ b/src/wifi/model/vht/vht-operation.cc @@ -36,7 +36,7 @@ VhtOperation::ElementId () const return IE_VHT_OPERATION; } -uint8_t +uint16_t VhtOperation::GetInformationFieldSize () const { return 5; @@ -114,8 +114,8 @@ VhtOperation::SerializeInformationField (Buffer::Iterator start) const start.WriteU16 (GetBasicVhtMcsAndNssSet ()); } -uint8_t -VhtOperation::DeserializeInformationField (Buffer::Iterator start, uint8_t length) +uint16_t +VhtOperation::DeserializeInformationField (Buffer::Iterator start, uint16_t length) { Buffer::Iterator i = start; uint8_t channelWidth = i.ReadU8 (); diff --git a/src/wifi/model/vht/vht-operation.h b/src/wifi/model/vht/vht-operation.h index d2a053f9c..358ff4fb4 100644 --- a/src/wifi/model/vht/vht-operation.h +++ b/src/wifi/model/vht/vht-operation.h @@ -39,9 +39,6 @@ public: // Implementations of pure virtual methods of WifiInformationElement WifiInformationElementId ElementId () const override; - uint8_t GetInformationFieldSize () const override; - void SerializeInformationField (Buffer::Iterator start) const override; - uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length) override; /** * Set the Channel Width field in the VHT Operation information element. @@ -103,6 +100,10 @@ public: private: + uint16_t GetInformationFieldSize () const override; + void SerializeInformationField (Buffer::Iterator start) const override; + uint16_t DeserializeInformationField (Buffer::Iterator start, uint16_t length) override; + //VHT Operation Information uint8_t m_channelWidth; ///< channel width uint8_t m_channelCenterFrequencySegment0; ///< channel center frequency segment 0 diff --git a/src/wifi/model/wifi-information-element.cc b/src/wifi/model/wifi-information-element.cc index 5a7dff5ad..9b01129a6 100644 --- a/src/wifi/model/wifi-information-element.cc +++ b/src/wifi/model/wifi-information-element.cc @@ -91,7 +91,7 @@ WifiInformationElement::DeserializeIfPresent (Buffer::Iterator i) return start; } - uint8_t length = i.ReadU8 (); + uint16_t length = i.ReadU8 (); if (ElementId () == IE_EXTENSION) { uint8_t elementIdExt = i.ReadU8 (); diff --git a/src/wifi/model/wifi-information-element.h b/src/wifi/model/wifi-information-element.h index ca8099f5f..0a80996c3 100644 --- a/src/wifi/model/wifi-information-element.h +++ b/src/wifi/model/wifi-information-element.h @@ -336,7 +336,7 @@ private: * * \return the length of serialized information */ - virtual uint8_t GetInformationFieldSize () const = 0; + virtual uint16_t GetInformationFieldSize () const = 0; /** * Serialize information (i.e., the body of the IE, not including * the Element ID and length octets) @@ -350,12 +350,12 @@ private: * the Element ID and length octets) * * \param start an iterator which points to where the information should be written. - * \param length + * \param length the expected number of bytes to read * * \return the number of bytes read */ - virtual uint8_t DeserializeInformationField (Buffer::Iterator start, - uint8_t length) = 0; + virtual uint16_t DeserializeInformationField (Buffer::Iterator start, + uint16_t length) = 0; }; } //namespace ns3