Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
cofhelloelems.h
1 /*
2  * cofhelloelems.h
3  *
4  * Created on: 31.12.2013
5  * Author: andreas
6  */
7 
8 #ifndef COFHELLOELEMS_H_
9 #define COFHELLOELEMS_H_
10 
11 #include <inttypes.h>
12 #include <map>
13 
14 #include "rofl/common/openflow/cofhelloelem.h"
15 #include "rofl/common/openflow/cofhelloelemversionbitmap.h"
16 #include "rofl/common/logging.h"
17 
18 namespace rofl {
19 namespace openflow {
20 
21 class eHelloElemsBase : public RoflException {};
24 
26  public std::map<uint8_t, cofhello_elem*>
27 {
28 public: // iterators
29 
30  typedef std::map<uint8_t, cofhello_elem*>::iterator iterator;
31  typedef std::map<uint8_t, cofhello_elem*>::const_iterator const_iterator;
32 
33  typedef std::map<uint8_t, cofhello_elem*>::reverse_iterator reverse_iterator;
34  typedef std::map<uint8_t, cofhello_elem*>::const_reverse_iterator const_reverse_iterator;
35 
36 public:
37 
41  cofhelloelems();
42 
46  virtual
47  ~cofhelloelems();
48 
53  uint8_t *buf, size_t buflen);
54 
59  cmemory const& body);
60 
65  cofhelloelems const& elems);
66 
71  operator= (
72  cofhelloelems const& elems);
73 
74 public:
75 
79  void
80  unpack(uint8_t *buf, size_t buflen);
81 
85  void
86  pack(uint8_t* buf, size_t buflen);
87 
91  size_t
92  length() const;
93 
97  void
98  clear();
99 
100 public:
101 
106  add_hello_elem_versionbitmap();
107 
112  set_hello_elem_versionbitmap();
113 
118  get_hello_elem_versionbitmap();
119 
123  void
124  drop_hello_elem_versionbitmap();
125 
129  bool
130  has_hello_elem_versionbitmap();
131 
132 private:
133 
137  void
138  map_and_insert(
139  cofhello_elem const& elem);
140 
141 public:
142 
143  friend std::ostream&
144  operator<< (std::ostream& os, cofhelloelems const& elems) {
145  os << indent(0) << "<cofhelloelems #elems:" << (int)elems.size() <<
146  " length:" << (int)elems.length() << " >" << std::endl;
147  indent i(2);
148  for (cofhelloelems::const_iterator
149  it = elems.begin(); it != elems.end(); ++it) {
150  cofhello_elem const& elem = *(it->second);
151  switch (elem.get_type()) {
152  case openflow13::OFPHET_VERSIONBITMAP: {
153  os << cofhello_elem_versionbitmap(elem);
154  } break;
155  default: {
156  os << *(it->second);
157  } break;
158  }
159  }
160  return os;
161  };
162 };
163 
164 }; /* namespace openflow */
165 }; /* namespace rofl */
166 
167 
168 
169 #endif /* COFHELLOELEMS_H_ */
Definition: cofhelloelems.h:23
Definition: cofhelloelems.h:21
Definition: cofhelloelemversionbitmap.h:22
Definition: cofhelloelems.h:22
Definition: cofhelloelems.h:25
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
Definition: logging.h:76
Definition: cofhelloelem.h:21
Definition: croflexception.h:27