Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
gtpuext.h
1 /*
2  * gtpuext.h
3  *
4  * Created on: 08.07.2013
5  * Author: andreas
6  */
7 
8 #ifndef GTPUEXT_H_
9 #define GTPUEXT_H_ 1
10 
11 #include <ostream>
12 #include <inttypes.h>
13 
14 #include "../cmemory.h"
15 
16 namespace rofl
17 {
18 
19 class gtpuext :
20  public cmemory
21 {
22 public:
23 
24  // GTP-Uv1 extension header types
25  enum gtpu_ext_type_t {
26  GTPU_EXT_NO_MORE_EXTS = 0,
27  GTPU_EXT_SVC_CLASS_INDICATOR = 32,
28  GTPU_EXT_UDP_PORT = 64,
29  GTPU_EXT_PDCP_PDU_NUMBER = 192,
30  };
31 
32  // GTP-Uv1 extension header
33  struct gtpu_ext_hdr_t {
34  uint8_t extlen; // length of extension header in bytes
35  uint8_t data[0]; // pointer to start of data
36  /* last byte contains next extension header type */
37  };
38 
39  struct gtpu_ext_hdr_t *exthdr;
40 
41 public:
42 
43 
47  gtpuext(
48  size_t extlen = 0);
49 
50 
54  virtual
55  ~gtpuext();
56 
57 
61  gtpuext(
62  gtpuext const& ext);
63 
64 
68  gtpuext&
69  operator= (
70  gtpuext const& ext);
71 
72 
76  gtpuext(
77  uint8_t* buf,
78  size_t buflen);
79 
80 
84  virtual void
85  pack(uint8_t *buf, size_t buflen);
86 
87 
91  virtual void
92  unpack(uint8_t *buf, size_t buflen);
93 
94 
95 public:
96 
97 
101  virtual size_t
102  get_length() const;
103 
104 
108  virtual void
109  set_length(size_t len);
110 
111 
115  virtual uint8_t
116  get_next_hdr_type() const;
117 
118 
122  virtual void
123  set_next_hdr_type(uint8_t type);
124 
125 
126 
127 public:
128 
129 
133  friend std::ostream&
134  operator<< (std::ostream& os, gtpuext const& ext)
135  {
136  os << "gtpuext{"
137  << "length=" << (unsigned int)ext.get_length() << " "
138  << "nexthdr=" << (unsigned int)ext.get_next_hdr_type() << " "
139  << "}";
140  return os;
141  };
142 };
143 
144 
145 
146 
147 
148 
153  public gtpuext
154 {
155 public:
156 
158  uint8_t len;
159  uint16_t udpport;
160  uint8_t nhtype;
161  };
162 
163  struct gtpu_udp_port_ext_hdr_t *udp_port_exthdr;
164 
165 public:
166 
171  uint16_t udp_port = 0);
172 
173 
177  virtual
178  ~gtpuext_udp_port();
179 
180 
185  gtpuext const& ext);
186 
187 
192  operator= (
193  gtpuext const& ext);
194 
195 
200  uint8_t *buf, size_t buflen);
201 
202 
203 public:
204 
205 
209  uint16_t
210  get_udp_port() const;
211 
212 
216  void
217  set_udp_port(uint16_t udp_port);
218 
219 
220 public:
221 
222 
226  friend std::ostream&
227  operator<< (std::ostream& os, gtpuext_udp_port const& ext)
228  {
229  os << "gtpuext_udp_port{"
230  << "length=" << (unsigned int)ext.get_length() << " "
231  << "udpport=" << (unsigned int)ext.get_udp_port() << " "
232  << "nexthdr=" << (unsigned int)ext.get_next_hdr_type() << " "
233  << "}";
234  return os;
235  };
236 };
237 
238 
239 
240 
241 
242 
243 
248  public gtpuext
249 {
250 public:
251 
253  uint8_t len;
254  uint16_t pdcp_pdu_number;
255  uint8_t nhtype;
256  };
257 
258  struct gtpu_pdcp_pdu_number_ext_hdr_t *pdcp_pdu_number_exthdr;
259 
260 public:
261 
266  uint16_t pdcp_pdu_number = 0);
267 
268 
272  virtual
274 
275 
280  gtpuext const& ext);
281 
282 
287  operator= (
288  gtpuext const& ext);
289 
290 
295  uint8_t *buf, size_t buflen);
296 
297 
298 public:
299 
300 
304  uint16_t
305  get_pdcp_pdu_number() const;
306 
307 
311  void
312  set_pdcp_pdu_number(uint16_t pdcp_pdu_number);
313 
314 
315 public:
316 
317 
321  friend std::ostream&
322  operator<< (std::ostream& os, gtpuext_pdcp_pdu_number const& ext)
323  {
324  os << "gtpuext_pdcp_pdu_number{"
325  << "length=" << (unsigned int)ext.get_length() << " "
326  << "pdcppdunumber=" << (unsigned int)ext.get_pdcp_pdu_number() << " "
327  << "nexthdr=" << (unsigned int)ext.get_next_hdr_type() << " "
328  << "}";
329  return os;
330  };
331 };
332 
333 
334 
335 
336 
337 
338 
339 
340 
341 
346  public gtpuext
347 {
348 public:
349 
351  uint8_t len;
352  uint8_t svc_class_ind;
353  uint8_t pad;
354  uint8_t nhtype;
355  };
356 
357  struct gtpu_svc_class_ind_ext_hdr_t *svc_class_ind_exthdr;
358 
359 public:
360 
365  uint8_t svc_class_ind = 0);
366 
367 
371  virtual
373 
374 
379  gtpuext const& ext);
380 
381 
386  operator= (
387  gtpuext const& ext);
388 
389 
394  uint8_t *buf, size_t buflen);
395 
396 
397 public:
398 
399 
403  uint8_t
404  get_svc_class_ind() const;
405 
406 
410  void
411  set_svc_class_ind(uint8_t svc_class_ind);
412 
413 
414 public:
415 
416 
420  friend std::ostream&
421  operator<< (std::ostream& os, gtpuext_svc_class_ind const& ext)
422  {
423  os << "gtpuext_svc_class_indicator{"
424  << "length=" << (unsigned int)ext.get_length() << " "
425  << "svcclassind=" << (unsigned int)ext.get_svc_class_ind() << " "
426  << "nexthdr=" << (unsigned int)ext.get_next_hdr_type() << " "
427  << "}";
428  return os;
429  };
430 };
431 
432 
433 
434 }; // end of namespace
435 
436 #endif /* GTPUEXT_H_ */
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: gtpuext.cc:65
Definition: gtpuext.h:152
Definition: gtpuext.h:19
Definition: gtpuext.h:345
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: gtpuext.cc:73
Definition: gtpuext.h:33
Definition: gtpuext.h:247