Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1039)

Unified Diff: src/devices/mesh/wifi-information-element-vector.h

Issue 88094: 802.11s mesh stack model (Closed)
Patch Set: Review finished by Mathieu, ready to merge Created 14 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/devices/mesh/waf ('k') | src/devices/mesh/wifi-information-element-vector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/devices/mesh/wifi-information-element-vector.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/devices/mesh/wifi-information-element-vector.h
@@ -0,0 +1,155 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 IITP RAS
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Authors: Kirill Andreev <andreev@iitp.ru>
+ * Pavel Boyko <boyko.iitp.ru>
+ */
+
+#ifndef IE_VECTOR_H
+#define IE_VECTOR_H
+
+#include "ns3/header.h"
+
+namespace ns3 {
+class Packet;
+/**
+ * \ingroup mesh
+ *
+ * \brief Enum of all known information element id (aka tags).
+ *
+ * For now only 802.11s (mesh) related elements are supported here (so 11S prefix),
+ * but this can change in future.
+ *
+ * Note that 802.11s element ids are not yet officially assigned, we use ones
+ * compatible with open80211s (http://o11s.org/) implementation.
+ */
+enum WifiElementId {
+ /* begin of open80211s-compatible IDs */
+ IE11S_MESH_CONFIGURATION = 51,
+ IE11S_MESH_ID = 52,
+ /* end of open80211s-compatible IDs */
+ IE11S_LINK_METRIC_REPORT = 20,
+ IE11S_CONGESTION_NOTIFICATION,
+ /* begin of open80211s-compatible IDs */
+ IE11S_PEERING_MANAGEMENT = 55,
+ /* end of open80211s-compatible IDs */
+ IE11S_SUPP_MBSS_REG_CLASSES_CHANNELS = 23,
+ IE11S_MESH_CHANNEL_SWITCH_ANNOUNCEMENT,
+ IE11S_MESH_TIM,
+ IE11S_AWAKE_WINDOW,
+ IE11S_BEACON_TIMING,
+ IE11S_MCCAOP_SETUP_REQUEST,
+ IE11S_MCCAOP_SETUP_REPLY,
+ IE11S_MCCAOP_ADVERTISEMENT,
+ IE11S_MCCAOP_RESERVATION_TEARDOWN,
+ IE11S_PORTAL_ANNOUNCEMENT,
+ IE11S_RANN = 67,
+ /* begin of open80211s-compatible IDs */
+ IE11S_PREQ = 68,
+ IE11S_PREP = 69,
+ IE11S_PERR = 70,
+ /* end of open80211s-compatible IDs */
+ IE11S_PROXY_UPDATE = 37,
+ IE11S_PROXY_UPDATE_CONFIRMATION,
+ IE11S_ABBREVIATED_HANDSHAKE,
+ IE11S_MESH_PEERING_PROTOCOL_VERSION = 74,
+};
+
+/**
+ * \ingroup mesh
+ *
+ * \brief Information element, as defined in 802.11-2007 standard
+ *
+ * Elements are defined to have a common general format consisting of a 1 octet Element ID field, a 1 octet
+ * length field, and a variable-length element-specific information field. Each element is assigned a unique
+ * Element ID as defined in this standard. The Length field specifies the number of octets in the Information
+ * field.
+ */
+class WifiInformationElement : public RefCountBase
+{
+public:
+ ///\name Each subclass must implement
+ //\{
+ virtual void Print (std::ostream &os) const = 0;
+ /// Own unique Element ID
+ virtual WifiElementId ElementId () const = 0;
+ /// Length of serialized information
+ virtual uint8_t GetInformationSize () const = 0;
+ /// Serialize information
+ virtual void SerializeInformation (Buffer::Iterator start) const = 0;
+ /// Deserialize information
+ virtual uint8_t DeserializeInformation (Buffer::Iterator start, uint8_t length) = 0;
+ //\}
+
+ /// Compare information elements using Element ID
+ friend bool operator< (WifiInformationElement const & a, WifiInformationElement const & b);
+};
+
+/// Compare information elements using Element ID
+bool operator< (WifiInformationElement const & a, WifiInformationElement const & b);
+
+/**
+ * \ingroup mesh
+ *
+ * \brief Information element vector
+ *
+ * Implements a vector of WifiInformationElement's
+ */
+class WifiInformationElementVector : public Header
+{
+public:
+ WifiInformationElementVector ();
+ ~WifiInformationElementVector ();
+ ///\name Inherited from Header
+ //\{
+ static TypeId GetTypeId ();
+ TypeId GetInstanceTypeId () const;
+ virtual uint32_t GetSerializedSize () const;
+ virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \attention When you use RemoveHeader, WifiInformationElementVector supposes, that
+ * all buffer consists of information elements
+ * @param start
+ * @return
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
+ virtual void Print (std::ostream &os) const;
+ //\}
+ /**
+ * \brief Needed when you try to deserialize a lonely IE inside other header
+ * \param start is the start of the buffer
+ * \return deserialized bytes
+ */
+ virtual uint32_t DeserializeSingleIe (Buffer::Iterator start);
+ ///Set maximum size to control overflow of the max packet length
+ void SetMaxSize (uint16_t size);
+ typedef std::vector<Ptr<WifiInformationElement> >::iterator Iterator;
+ Iterator Begin ();
+ Iterator End ();
+ bool AddInformationElement (Ptr<WifiInformationElement> element);
+ Ptr<WifiInformationElement> FindFirst (enum WifiElementId id) const;
+private:
+ typedef std::vector<Ptr<WifiInformationElement> > IE_VECTOR;
+ uint32_t GetSize () const;
+ IE_VECTOR m_elements;
+ /// Size in bytes (actually, max packet length)
+ uint16_t m_maxSize;
+ friend bool operator== (const WifiInformationElementVector & a, const WifiInformationElementVector & b);
+};
+bool operator== (const WifiInformationElementVector & a, const WifiInformationElementVector & b);
+}
+#endif
« no previous file with comments | « src/devices/mesh/waf ('k') | src/devices/mesh/wifi-information-element-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b