From e9538480ae4d7cf9903b694122950d435d408b6f Mon Sep 17 00:00:00 2001 From: Kirill Andreev Date: Fri, 22 May 2009 13:58:39 +0400 Subject: [PATCH] Restructured mesh configuration element --- .../mesh/dot11s/ie-dot11s-configuration.cc | 39 +++++++++++---- .../mesh/dot11s/ie-dot11s-configuration.h | 47 ++++++++++++++----- .../mesh/dot11s/peer-management-plugin.cc | 1 + .../mesh/dot11s/peer-management-protocol.cc | 5 ++ .../mesh/dot11s/peer-management-protocol.h | 2 + 5 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/devices/mesh/dot11s/ie-dot11s-configuration.cc b/src/devices/mesh/dot11s/ie-dot11s-configuration.cc index 50d764be0..f1f36aa4e 100644 --- a/src/devices/mesh/dot11s/ie-dot11s-configuration.cc +++ b/src/devices/mesh/dot11s/ie-dot11s-configuration.cc @@ -81,7 +81,9 @@ IeConfiguration::IeConfiguration (): m_APSId (PROTOCOL_HWMP), m_APSMId (METRIC_AIRTIME), m_CCMId (CONGESTION_DEFAULT), - m_CP (CHANNEL_PRECEDENCE_OFF) + m_SPId (SYNC_NEIGHBOUR_OFFSET), + m_APId (AUTH_NULL), + m_neighbors (0) {} TypeId @@ -104,7 +106,9 @@ IeConfiguration::GetInformationSize () const + 4 // APSPId + 4 // APSMId + 4 // CCMId - + 4 // CP + + 4 // SPId + + 4 // APId + + 1 // Mesh formation info (see 7.3.2.86.6 of 802.11s draft 3.0) + m_meshCap.GetSerializedSize (); } @@ -117,9 +121,12 @@ IeConfiguration::SerializeInformation (Buffer::Iterator i) const // Active Path Metric ID: i.WriteHtonU32 (m_APSMId); // Congestion Control Mode ID: - i.WriteU32 (m_CCMId); - // Channel Precedence: - i.WriteU32 (m_CP); + i.WriteHtonU32 (m_CCMId); + // Sync: + i.WriteHtonU32 (m_SPId); + // Auth: + i.WriteHtonU32 (m_APId); + i.WriteU8 (m_neighbors * 2); m_meshCap.Serialize (i); } @@ -134,9 +141,10 @@ IeConfiguration::DeserializeInformation (Buffer::Iterator i, uint8_t length) // Active Path Metric ID: m_APSMId = (dot11sPathSelectionMetric)i.ReadNtohU32 (); // Congestion Control Mode ID: - m_CCMId = (dot11sCongestionControlMode)i.ReadU32 (); - // Channel Precedence: - m_CP = (dot11sChannelPrecedence)i.ReadU32 (); + m_CCMId = (dot11sCongestionControlMode)i.ReadNtohU32 (); + m_SPId = (dot11sSynchronizationProtocolIdentifier)i.ReadNtohU32 (); + m_APId = (dot11sAuthenticationProtocol)i.ReadNtohU32 (); + m_neighbors = i.ReadU8 () / 2; i = m_meshCap.Deserialize (i); return i.GetDistanceFrom (start); } @@ -168,7 +176,16 @@ IeConfiguration::IsAirtime () { return (m_APSMId == METRIC_AIRTIME); } - +void +IeConfiguration::SetNeighborCount (uint8_t neighbors) +{ + m_neighbors = (neighbors > 31) ? 31 : neighbors; +} +uint8_t +IeConfiguration::GetNeighborCount () +{ + return m_neighbors; +} dot11sMeshCapability const& IeConfiguration::MeshCapability () { return m_meshCap; @@ -190,7 +207,9 @@ bool operator== (const IeConfiguration & a, const IeConfiguration & b) (a.m_APSId == b.m_APSId) && (a.m_APSMId == b.m_APSMId) && (a.m_CCMId == b.m_CCMId) && - (a.m_CP == b.m_CP) && + (a.m_SPId == b.m_SPId) && + (a.m_APId == b.m_APId) && + (a.m_neighbors == b.m_neighbors) && (a.m_meshCap == b.m_meshCap) ); } diff --git a/src/devices/mesh/dot11s/ie-dot11s-configuration.h b/src/devices/mesh/dot11s/ie-dot11s-configuration.h index 96d674006..e50371325 100644 --- a/src/devices/mesh/dot11s/ie-dot11s-configuration.h +++ b/src/devices/mesh/dot11s/ie-dot11s-configuration.h @@ -29,7 +29,7 @@ namespace ns3 { namespace dot11s { /** * \ingroup dot11s - * \brief See 7.3.2.81.1 in 802.11s draft 2.07 + * \brief See 7.3.2.84.1 in 802.11s draft 3.0 */ enum dot11sPathSelectionProtocol { @@ -38,7 +38,7 @@ enum dot11sPathSelectionProtocol }; /** * \ingroup dot11s - * \brief See 7.3.2.81.2 in 802.11s draft 2.07 + * \brief See 7.3.2.84.2 in 802.11s draft 3.0 */ enum dot11sPathSelectionMetric { @@ -47,7 +47,7 @@ enum dot11sPathSelectionMetric }; /** * \ingroup dot11s - * \brief See 7.3.2.81.3 in 802.11s draft 2.07 + * \brief See 7.3.2.84.3 in 802.11s draft 3.0 */ enum dot11sCongestionControlMode { @@ -56,7 +56,25 @@ enum dot11sCongestionControlMode }; /** * \ingroup dot11s - * \brief See 7.3.2.81.4 in 802.11s draft 2.07 + * \brief See 7.3.2.86.4 in 802.11s draft 3.0 + */ +enum dot11sSynchronizationProtocolIdentifier +{ + SYNC_NEIGHBOUR_OFFSET = 0x000fac00, + SYNC_NULL = 0x000facff, +}; +/** + * \ingroup dot11s + * \brief See 7.3.2.86.5 in 802.11s draft 3.0 + */ +enum dot11sAuthenticationProtocol +{ + AUTH_NULL = 0x000fac00, + AUTH_SAE = 0x000fac01, +}; +/** + * \ingroup dot11s + * \brief See 7.3.2.84.4 in 802.11s draft 3.0 */ enum dot11sChannelPrecedence { @@ -65,7 +83,7 @@ enum dot11sChannelPrecedence /** * \ingroup dot11s - * \brief See 7.3.2.81.5 in 802.11s draft 2.07 + * \brief See 7.3.2.84.5 in 802.11s draft 3.0 */ class dot11sMeshCapability { @@ -87,7 +105,7 @@ public: /** * \ingroup dot11s * \brief Describes Mesh Configuration Element - * see 7.3.2.81 of 802.11s draft 2.07 + * see 7.3.2.84 of 802.11s draft 3.0 */ class IeConfiguration : public WifiInformationElement { @@ -96,10 +114,12 @@ public: TypeId GetInstanceTypeId () const; IeConfiguration (); - void SetRouting (dot11sPathSelectionProtocol routingId); - void SetMetric (dot11sPathSelectionMetric metricId); - bool IsHWMP (); - bool IsAirtime (); + void SetRouting (dot11sPathSelectionProtocol routingId); + void SetMetric (dot11sPathSelectionMetric metricId); + bool IsHWMP (); + bool IsAirtime (); + void SetNeighborCount (uint8_t neighbors); + uint8_t GetNeighborCount (); dot11sMeshCapability const& MeshCapability (); private: @@ -118,9 +138,12 @@ private: dot11sPathSelectionMetric m_APSMId; /** Congestion Control Mode ID */ dot11sCongestionControlMode m_CCMId; - /* Channel Precedence */ - dot11sChannelPrecedence m_CP; + /** Sync protocol ID */ + dot11sSynchronizationProtocolIdentifier m_SPId; + /** Auth protocol ID */ + dot11sAuthenticationProtocol m_APId; dot11sMeshCapability m_meshCap; + uint8_t m_neighbors; friend bool operator== (const IeConfiguration & a, const IeConfiguration & b); }; bool operator== (const IeConfiguration & a, const IeConfiguration & b); diff --git a/src/devices/mesh/dot11s/peer-management-plugin.cc b/src/devices/mesh/dot11s/peer-management-plugin.cc index c7ad24f6e..0ee2a906a 100644 --- a/src/devices/mesh/dot11s/peer-management-plugin.cc +++ b/src/devices/mesh/dot11s/peer-management-plugin.cc @@ -177,6 +177,7 @@ PeerManagerMacPlugin::SendPeerLinkManagementFrame( ) { //Create a packet: + meshConfig.SetNeighborCount (m_protocol->GetNumberOfLinks ()); Ptr packet = Create (); packet->AddHeader (peerElement); PeerLinkFrameStart::PlinkFrameStartFields fields; diff --git a/src/devices/mesh/dot11s/peer-management-protocol.cc b/src/devices/mesh/dot11s/peer-management-protocol.cc index 9f45aa187..e171f8362 100644 --- a/src/devices/mesh/dot11s/peer-management-protocol.cc +++ b/src/devices/mesh/dot11s/peer-management-protocol.cc @@ -467,6 +467,11 @@ PeerManagementProtocol::PeerLinkStatus (uint32_t interface, Mac48Address peerAdd if(!m_peerStatusCallback.IsNull ()) m_peerStatusCallback (peerMeshPointAddress, peerAddress, interface, status); } +uint8_t +PeerManagementProtocol::GetNumberOfLinks () +{ + return m_numberOfActivePeers; +} Mac48Address PeerManagementProtocol::GetAddress () { diff --git a/src/devices/mesh/dot11s/peer-management-protocol.h b/src/devices/mesh/dot11s/peer-management-protocol.h index d8827a6b2..f8d995450 100644 --- a/src/devices/mesh/dot11s/peer-management-protocol.h +++ b/src/devices/mesh/dot11s/peer-management-protocol.h @@ -134,6 +134,8 @@ public: std::vector GetActiveLinks(uint32_t interface); ///\brief needed by plugins to set global source address Mac48Address GetAddress (); + ///\Needed to fill mesh configuration + uint8_t GetNumberOfLinks (); ///\brief: Report statistics void Report (std::ostream &) const; void ResetStats ();