Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
fudpframe.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #ifndef FUDPFRAME_H
6 #define FUDPFRAME_H 1
7 
8 #include <endian.h>
9 #ifndef htobe16
10  #include "../endian_conversion.h"
11 
12 #endif
13 
14 #include "../fframe.h"
15 #include "../caddress.h"
16 
17 namespace rofl
18 {
19 
20 class eUdpFrameBase : public eFrameBase {};
23 
24 
25 class fudpframe : public fframe {
26 public:
27 
28  /* UDP constants and definitions */
29  struct udp_hdr_t {
30  uint16_t sport;
31  uint16_t dport;
32  uint16_t length;
33  uint16_t checksum;
34  uint8_t data[0];
35  } __attribute__((packed));
36 
37  /* for UDP checksum calculation */
38  struct ip_pseudo_hdr_t {
39  uint32_t src;
40  uint32_t dst;
41  uint8_t reserved;
42  uint8_t proto;
43  uint16_t len;
44  } __attribute__((packed));
45 
46  enum udp_ip_proto_t {
47  UDP_IP_PROTO = 17,
48  };
49 
50 public:
51 
52 
56  fudpframe(
57  uint8_t *data,
58  size_t datalen);
59 
60 
64  virtual
65  ~fudpframe();
66 
67 
71  void
73  caddress_in4 const& ip_src,
74  caddress_in4 const& ip_dst,
75  uint8_t ip_proto,
76  uint16_t length);
77 
78 
79 public: // overloaded from fframe
80 
83  virtual bool
84  complete() const;
85 
88  virtual size_t
89  need_bytes() const;
90 
94  virtual void
95  validate(uint16_t total_len = 0) const;
96 
100  virtual void
101  initialize();
102 
106  virtual void
108  uint8_t *data, size_t datalen) throw (eFrameOutOfRange);
109 
113  virtual uint8_t*
114  payload() const throw (eFrameNoPayload);
115 
119  virtual size_t
120  payloadlen() const throw (eFrameNoPayload);
121 
122 public:
123 
126  uint16_t
127  get_sport() const;
128 
131  void
132  set_sport(uint16_t port);
133 
136  uint16_t
137  get_dport() const;
138 
141  void
142  set_dport(uint16_t port);
143 
146  uint16_t
147  get_length();
148 
151  void
152  set_length(uint16_t length);
153 
154 public: // data structures
155 
156  // pointer to udp header
157  struct udp_hdr_t *udp_hdr;
158 
159  // udp payload
160  uint8_t *data;
161 
162  // udp payload length
163  size_t datalen;
164 
165 public:
166 
167  friend std::ostream&
168  operator<< (std::ostream& os, fudpframe const& frame) {
169  os << dynamic_cast<fframe const&>( frame );
170  os << indent(2) << "<fudpframe ";
171  os << "dport:" << (int)frame.get_dport() << " ";
172  os << "sport:" << (int)frame.get_sport() << " ";
173  os << ">" << std::endl;
174  return os;
175  };
176 };
177 
178 }; // end of namespace
179 
180 #endif
virtual void validate(uint16_t total_len=0) const
Definition: fudpframe.cc:115
virtual ~fudpframe()
Definition: fudpframe.cc:22
Definition: fudpframe.h:25
virtual size_t need_bytes() const
Definition: fudpframe.cc:62
virtual uint8_t * payload() const
Definition: fudpframe.cc:92
Definition: fframe.h:21
virtual void initialize()
Definition: fudpframe.cc:30
virtual bool complete() const
Definition: fudpframe.cc:47
Definition: fframe.h:19
void udp_calc_checksum(caddress_in4 const &ip_src, caddress_in4 const &ip_dst, uint8_t ip_proto, uint16_t length)
Definition: fudpframe.cc:130
Definition: fudpframe.h:21
virtual size_t payloadlen() const
Definition: fudpframe.cc:102
fudpframe(uint8_t *data, size_t datalen)
Definition: fudpframe.cc:9
Definition: caddress.h:415
Definition: fframe.h:20
Definition: fudpframe.h:22
Definition: fudpframe.h:38
Definition: fframe.h:22
Definition: logging.h:76
Definition: fudpframe.h:29
Definition: fframe.h:31
virtual void payload_insert(uint8_t *data, size_t datalen)
Definition: fudpframe.cc:78
Definition: fudpframe.h:20