Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
cofmsg_experimenter.h
1 /*
2  * cofmsg_experimenter.h
3  *
4  * Created on: 18.03.2013
5  * Author: andi
6  */
7 
8 #ifndef COFMSG_EXPERIMENTER_H_
9 #define COFMSG_EXPERIMENTER_H_ 1
10 
11 #include "rofl/common/openflow/messages/cofmsg.h"
12 
13 namespace rofl {
14 namespace openflow {
15 
20  public cofmsg
21 {
22 private:
23 
24  cmemory body; // for experimental statistics messages
25 
26  union {
27  uint8_t* ofhu_experimenter;
28  struct openflow10::ofp_vendor_header* ofhu10_vendor;
29  struct openflow12::ofp_experimenter_header* ofhu12_experimenter;
30  struct openflow13::ofp_experimenter_header* ofhu13_experimenter;
31  } ofhu;
32 
33 #define ofh_experimenter ofhu.ofhu_experimenter
34 #define ofh10_vendor ofhu.ofhu10_vendor
35 #define ofh12_experimenter ofhu.ofhu12_experimenter
36 #define ofh13_experimenter ofhu.ofhu13_experimenter
37 
38 
39 public:
40 
41 
46  uint8_t of_version = 0,
47  uint32_t xid = 0,
48  uint32_t experimenter_type = 0,
49  uint32_t experimenter_flags = 0,
50  uint8_t *data = (uint8_t*)0,
51  size_t datalen = 0);
52 
53 
58  cofmsg_experimenter const& experimenter);
59 
60 
65  operator= (
66  cofmsg_experimenter const& experimenter);
67 
68 
72  virtual
74 
75 
79  cofmsg_experimenter(cmemory *memarea);
80 
81 
85  virtual void
86  reset();
87 
88 
92  virtual uint8_t*
93  resize(size_t len);
94 
95 
99  virtual size_t
100  length() const;
101 
102 
106  virtual void
107  pack(uint8_t *buf = (uint8_t*)0, size_t buflen = 0);
108 
109 
113  virtual void
114  unpack(uint8_t *buf, size_t buflen);
115 
116 
119  virtual void
120  validate();
121 
122 
123 public:
124 
125 
129  uint32_t
130  get_experimenter_id() const;
131 
135  void
136  set_experimenter_id(uint32_t exp_id);
137 
141  uint32_t
142  get_experimenter_type() const;
143 
147  void
148  set_experimenter_type(uint32_t exp_type);
149 
153  cmemory&
154  get_body();
155 
156 public:
157 
158  friend std::ostream&
159  operator<< (std::ostream& os, cofmsg_experimenter const& msg) {
160  os << dynamic_cast<cofmsg const&>( msg );
161  os << indent(2) << "<cofmsg_experimenter >" << std::endl;
162  os << indent(4) << "<exp-id:" << (int)msg.get_experimenter_id() << " >" << std::endl;
163  switch (msg.get_version()) {
164  case rofl::openflow12::OFP_VERSION:
165  case rofl::openflow13::OFP_VERSION: {
166  os << indent(4) << "<exp-type:" << (int)msg.get_experimenter_type() << " >" << std::endl;
167  } break;
168  default: {
169  // do nothing
170  };
171  }
172  indent i(4);
173  os << msg.body;
174  return os;
175  };
176 };
177 
178 } // end of namespace openflow
179 } // end of namespace rofl
180 
181 #endif /* COFMSG_EXPERIMENTER_H_ */
virtual ~cofmsg_experimenter()
Definition: cofmsg_experimenter.cc:82
Definition: openflow12.h:1559
Definition: cofmsg_experimenter.h:19
virtual size_t length() const
Definition: cofmsg_experimenter.cc:106
virtual void unpack(uint8_t *buf, size_t buflen)
Definition: cofmsg_experimenter.cc:164
virtual void reset()
Definition: cofmsg_experimenter.cc:90
Definition: openflow13.h:2063
virtual void validate()
Definition: cofmsg_experimenter.cc:174
cofmsg_experimenter(uint8_t of_version=0, uint32_t xid=0, uint32_t experimenter_type=0, uint32_t experimenter_flags=0, uint8_t *data=(uint8_t *) 0, size_t datalen=0)
Definition: cofmsg_experimenter.cc:5
Definition: openflow10.h:906
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
Definition: logging.h:76
virtual void pack(uint8_t *buf=(uint8_t *) 0, size_t buflen=0)
Definition: cofmsg_experimenter.cc:127
Definition: cofmsg.h:62