A Discrete-Event Network Simulator
API
wimax-tlv.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 INRIA, UDcast
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
19  *
20  */
21 
22 #ifndef WIMAX_TLV_H
23 #define WIMAX_TLV_H
24 
25 #define WIMAX_TLV_EXTENDED_LENGTH_MASK 0x80
26 
27 #include "ns3/ipv4-address.h"
28 #include <cstdlib>
29 #include "ns3/log.h"
30 #include "ns3/assert.h"
31 #include "ns3/uinteger.h"
32 #include "ns3/header.h"
33 #include <vector>
34 
35 namespace ns3 {
36 
42 class TlvValue
43 {
44 public:
45  virtual ~TlvValue ()
46  {
47  }
48  virtual uint32_t GetSerializedSize (void) const = 0;
49  virtual void Serialize (Buffer::Iterator start) const = 0;
50  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLen ) = 0;
51  virtual TlvValue * Copy (void) const = 0;
52 private:
53 };
54 
55 
56 // =============================================================================
64 class Tlv : public Header
65 {
66 public:
68  {
69  HMAC_TUPLE = 149,
76  };
77  Tlv (uint8_t type, uint64_t length, const TlvValue & value);
78  Tlv (void);
79  ~Tlv (void);
84  static TypeId GetTypeId (void);
85  virtual TypeId GetInstanceTypeId (void) const;
86  virtual void Print (std::ostream &os) const;
87  virtual uint32_t GetSerializedSize (void) const;
88  virtual void Serialize (Buffer::Iterator start) const;
89  virtual uint32_t Deserialize (Buffer::Iterator start);
90  uint8_t GetSizeOfLen (void) const;
91  uint8_t GetType (void) const;
92  uint64_t GetLength (void) const;
93  TlvValue* PeekValue (void);
94  Tlv * Copy (void) const;
95  TlvValue * CopyValue (void) const;
96  Tlv &operator = (Tlv const& o);
97  Tlv (const Tlv & tlv);
98 
99 private:
100  uint8_t m_type;
101  uint64_t m_length;
103 };
104 
105 // ==============================================================================
109 class U8TlvValue : public TlvValue
110 {
111 public:
112  U8TlvValue (uint8_t value);
113  U8TlvValue ();
114  ~U8TlvValue (void);
115  virtual uint32_t GetSerializedSize (void) const;
116  virtual void Serialize (Buffer::Iterator start) const;
117  virtual uint32_t Deserialize (Buffer::Iterator start,uint64_t valueLen);
118  uint32_t Deserialize (Buffer::Iterator start);
119  uint8_t GetValue (void) const;
120  U8TlvValue * Copy (void) const;
121 private:
122  uint8_t m_value;
123 };
124 
125 // ==============================================================================
129 class U16TlvValue : public TlvValue
130 {
131 public:
132  U16TlvValue (uint16_t value);
133  U16TlvValue ();
134  ~U16TlvValue (void);
135  virtual uint32_t GetSerializedSize (void) const;
136  virtual void Serialize (Buffer::Iterator start) const;
137  virtual uint32_t Deserialize (Buffer::Iterator start,uint64_t valueLen);
138  uint32_t Deserialize (Buffer::Iterator start);
139  uint16_t GetValue (void) const;
140  virtual U16TlvValue * Copy (void) const;
141 private:
142  uint16_t m_value;
143 };
144 
145 // ==============================================================================
149 class U32TlvValue : public TlvValue
150 {
151 public:
152  U32TlvValue (uint32_t value);
153  U32TlvValue ();
154  ~U32TlvValue (void);
155 
156  virtual uint32_t GetSerializedSize (void) const;
157  virtual void Serialize (Buffer::Iterator start) const;
158  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLen);
159  uint32_t Deserialize (Buffer::Iterator start);
160  uint32_t GetValue (void) const;
161  virtual U32TlvValue * Copy (void) const;
162 private:
163  uint32_t m_value;
164 };
165 
166 // ==============================================================================
167 
172 class VectorTlvValue : public TlvValue
173 {
174 public:
175  typedef std::vector<Tlv*>::const_iterator Iterator;
176  VectorTlvValue (void);
177  ~VectorTlvValue (void);
178  virtual uint32_t GetSerializedSize (void) const;
179  virtual void Serialize (Buffer::Iterator start) const;
180  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength) = 0;
181  Iterator Begin () const;
182  Iterator End () const;
183  void Add (const Tlv & val);
184  virtual VectorTlvValue * Copy (void) const = 0;
185 private:
186  std::vector<Tlv*> * m_tlvList;
187 };
188 
189 // ==============================================================================
194 {
195 
196 public:
197  enum Type
198  {
199  SFID = 1,
200  CID = 2,
214  SDU_Size = 16,
225  reserved2 = 27,
228  };
229  SfVectorTlvValue ();
230  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
231  virtual SfVectorTlvValue * Copy (void) const;
232 
233 };
234 // ==============================================================================
235 
241 {
242 public:
243  enum Type
244  {
247  };
249  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
250  virtual CsParamVectorTlvValue * Copy (void) const;
251 private:
252 };
253 
254 // ==============================================================================
255 
261 {
262 public:
264  {
265  Priority = 1,
266  ToS = 2,
267  Protocol = 3,
268  IP_src = 4,
269  IP_dst = 5,
270  Port_src = 6,
271  Port_dst = 7,
272  Index = 14,
273  };
275  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
276  virtual ClassificationRuleVectorTlvValue * Copy (void) const;
277 private:
278 };
279 
280 // ==============================================================================
284 class TosTlvValue : public TlvValue
285 {
286 public:
287  TosTlvValue ();
288  TosTlvValue (uint8_t, uint8_t, uint8_t);
289  ~TosTlvValue ();
290  virtual uint32_t GetSerializedSize (void) const;
291  virtual void Serialize (Buffer::Iterator start) const;
292  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
293  uint8_t GetLow (void) const;
294  uint8_t GetHigh (void) const;
295  uint8_t GetMask (void) const;
296  virtual TosTlvValue * Copy () const;
297 private:
298  uint8_t m_low;
299  uint8_t m_high;
300  uint8_t m_mask;
301 };
302 
303 // ==============================================================================
308 {
309 public:
310  struct PortRange
311  {
312  uint16_t PortLow;
313  uint16_t PortHigh;
314  };
315  typedef std::vector<struct PortRange>::const_iterator Iterator;
318  virtual uint32_t GetSerializedSize (void) const;
319  virtual void Serialize (Buffer::Iterator start) const;
320  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
321  void Add (uint16_t portLow, uint16_t portHigh);
322  Iterator Begin () const;
323  Iterator End () const;
324  virtual PortRangeTlvValue * Copy (void) const;
325 private:
326  std::vector<struct PortRange> * m_portRange;
327 };
328 
329 // ==============================================================================
334 {
335 public:
336  ProtocolTlvValue ();
338  typedef std::vector<uint8_t>::const_iterator Iterator;
339  virtual uint32_t GetSerializedSize (void) const;
340  virtual void Serialize (Buffer::Iterator start) const;
341  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
342  void Add (uint8_t protiocol);
343  Iterator Begin () const;
344  Iterator End () const;
345  virtual ProtocolTlvValue * Copy (void) const;
346 private:
347  std::vector<uint8_t> * m_protocol;
348 };
349 
350 // ==============================================================================
351 
356 {
357 public:
358  struct ipv4Addr
359  {
362  };
363  typedef std::vector<struct ipv4Addr>::const_iterator Iterator;
366  virtual uint32_t GetSerializedSize (void) const;
367  virtual void Serialize (Buffer::Iterator start) const;
368  virtual uint32_t Deserialize (Buffer::Iterator start, uint64_t valueLength);
369  void Add (Ipv4Address address, Ipv4Mask Mask);
370  Iterator Begin () const;
371  Iterator End () const;
372  virtual Ipv4AddressTlvValue * Copy () const;
373 private:
374  std::vector<struct ipv4Addr> * m_ipv4Addr;
375 };
376 
377 }
378 
379 #endif /* WIMAX_TLV_H */
Protocol header serialization and deserialization.
Definition: header.h:42
virtual PortRangeTlvValue * Copy(void) const
Definition: wimax-tlv.cc:938
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:307
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:1054
virtual ProtocolTlvValue * Copy(void) const
Definition: wimax-tlv.cc:1010
uint8_t GetSizeOfLen(void) const
Definition: wimax-tlv.cc:109
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:1044
std::vector< struct ipv4Addr >::const_iterator Iterator
Definition: wimax-tlv.h:363
std::vector< uint8_t >::const_iterator Iterator
Definition: wimax-tlv.h:338
Iterator Begin() const
Definition: wimax-tlv.cc:998
uint16_t GetValue(void) const
Definition: wimax-tlv.cc:587
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
virtual uint32_t GetSerializedSize(void) const =0
uint8_t GetValue(void) const
Definition: wimax-tlv.cc:537
def start()
Definition: core.py:1482
uint64_t m_length
Definition: wimax-tlv.h:101
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)=0
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:564
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: wimax-tlv.cc:147
Iterator End() const
Definition: wimax-tlv.cc:1083
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:891
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:843
void Add(uint16_t portLow, uint16_t portHigh)
Definition: wimax-tlv.cc:918
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:251
virtual ~TlvValue()
Definition: wimax-tlv.h:45
Tlv * Copy(void) const
Definition: wimax-tlv.cc:230
this class implements the convergence sub-layer descriptor as a tlv vector
Definition: wimax-tlv.h:240
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:965
uint16_t m_value
Definition: wimax-tlv.h:142
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:850
virtual U16TlvValue * Copy(void) const
Definition: wimax-tlv.cc:593
void Add(uint8_t protiocol)
Definition: wimax-tlv.cc:992
This class implements the Type-Len-Value structure channel encodings as described by "IEEE Standard f...
Definition: wimax-tlv.h:64
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:905
iterator in a Buffer instance
Definition: buffer.h:98
The value field of a tlv can take different values (uint8_t, uint16, vector...).
Definition: wimax-tlv.h:42
std::vector< struct ipv4Addr > * m_ipv4Addr
Definition: wimax-tlv.h:374
TlvValue * m_value
Definition: wimax-tlv.h:102
uint8_t GetLow(void) const
Definition: wimax-tlv.cc:858
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:519
void Add(const Tlv &val)
Definition: wimax-tlv.cc:284
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:127
std::vector< struct PortRange >::const_iterator Iterator
Definition: wimax-tlv.h:315
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:1038
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:648
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:569
uint64_t GetLength(void) const
Definition: wimax-tlv.cc:219
uint8_t m_value
Definition: wimax-tlv.h:122
virtual VectorTlvValue * Copy(void) const =0
std::vector< Tlv * > * m_tlvList
Definition: wimax-tlv.h:186
uint8_t GetHigh(void) const
Definition: wimax-tlv.cc:863
static TypeId GetTypeId(void)
Register this type.
Definition: wimax-tlv.cc:32
Tlv(void)
Definition: wimax-tlv.cc:59
virtual TlvValue * Copy(void) const =0
std::vector< uint8_t > * m_protocol
Definition: wimax-tlv.h:347
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:262
U8TlvValue * Copy(void) const
Definition: wimax-tlv.cc:543
Iterator End() const
Definition: wimax-tlv.cc:1004
virtual U32TlvValue * Copy(void) const
Definition: wimax-tlv.cc:641
TlvValue * CopyValue(void) const
Definition: wimax-tlv.cc:76
uint8_t GetType(void) const
Definition: wimax-tlv.cc:214
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: wimax-tlv.cc:42
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLen)=0
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual SfVectorTlvValue * Copy(void) const
Definition: wimax-tlv.cc:296
std::vector< struct PortRange > * m_portRange
Definition: wimax-tlv.h:326
virtual CsParamVectorTlvValue * Copy(void) const
Definition: wimax-tlv.cc:702
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:514
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:103
virtual ClassificationRuleVectorTlvValue * Copy(void) const
Definition: wimax-tlv.cc:719
TlvValue * PeekValue(void)
Definition: wimax-tlv.cc:224
Iterator Begin() const
Definition: wimax-tlv.cc:1077
~Tlv(void)
Definition: wimax-tlv.cc:66
this class implements the classifier descriptor as a tlv vector
Definition: wimax-tlv.h:260
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:613
uint8_t m_type
Definition: wimax-tlv.h:100
Iterator End() const
Definition: wimax-tlv.cc:932
this class is used to implement a vector of values in one tlv value field
Definition: wimax-tlv.h:172
Tlv & operator=(Tlv const &o)
Definition: wimax-tlv.cc:89
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
virtual uint32_t GetSerializedSize(void) const
Definition: wimax-tlv.cc:838
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLen)
Definition: wimax-tlv.cc:524
virtual void Print(std::ostream &os) const
Definition: wimax-tlv.cc:47
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLen)
Definition: wimax-tlv.cc:623
Iterator Begin() const
Definition: wimax-tlv.cc:272
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:971
virtual void Serialize(Buffer::Iterator start) const =0
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:618
virtual Ipv4AddressTlvValue * Copy() const
Definition: wimax-tlv.cc:1089
uint8_t m_high
Definition: wimax-tlv.h:299
uint32_t GetValue(void) const
Definition: wimax-tlv.cc:635
void Add(Ipv4Address address, Ipv4Mask Mask)
Definition: wimax-tlv.cc:1068
uint8_t m_mask
Definition: wimax-tlv.h:300
tuple address
Definition: first.py:37
uint32_t m_value
Definition: wimax-tlv.h:163
uint8_t GetMask(void) const
Definition: wimax-tlv.cc:868
std::vector< Tlv * >::const_iterator Iterator
Definition: wimax-tlv.h:175
virtual void Serialize(Buffer::Iterator start) const
Definition: wimax-tlv.cc:896
a unique identifier for an interface.
Definition: type-id.h:58
Iterator Begin() const
Definition: wimax-tlv.cc:926
virtual TosTlvValue * Copy() const
Definition: wimax-tlv.cc:874
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:980
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLength)
Definition: wimax-tlv.cc:730
virtual uint32_t Deserialize(Buffer::Iterator start, uint64_t valueLen)
Definition: wimax-tlv.cc:574
Iterator End() const
Definition: wimax-tlv.cc:278