Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
cofmeterbands.h
1 /*
2  * cofmeterbands.h
3  *
4  * Created on: 16.06.2013
5  * Author: andreas
6  */
7 
8 #ifndef COFMETERBANDS_H_
9 #define COFMETERBANDS_H_ 1
10 
11 #include <inttypes.h>
12 
13 #include <map>
14 #include <iostream>
15 
16 #include "rofl/common/openflow/cofmeterband.h"
17 
18 namespace rofl {
19 namespace openflow {
20 
23 
25 public:
26 
27 
32  uint8_t of_version = rofl::openflow::OFP_VERSION_UNKNOWN);
33 
34 
38  virtual
39  ~cofmeter_bands();
40 
41 
46  const cofmeter_bands& mbands);
47 
48 
53  operator= (
54  const cofmeter_bands& mbands);
55 
59  const bool
60  operator== (
61  const cofmeter_bands& mbands);
62 
63 public:
64 
65 
69  void
70  clear();
71 
75  void
76  set_version(uint8_t of_version) {
77  this->of_version = of_version;
78  for (std::map<unsigned int, cofmeter_band_drop>::iterator
79  it = mbs_drop.begin(); it != mbs_drop.end(); ++it) {
80  it->second.set_version(of_version);
81  }
82  for (std::map<unsigned int, cofmeter_band_dscp_remark>::iterator
83  it = mbs_dscp_remark.begin(); it != mbs_dscp_remark.end(); ++it) {
84  it->second.set_version(of_version);
85  }
86  for (std::map<unsigned int, cofmeter_band_experimenter>::iterator
87  it = mbs_experimenter.begin(); it != mbs_experimenter.end(); ++it) {
88  it->second.set_version(of_version);
89  }
90  };
91 
95  uint8_t
96  get_version() const { return of_version; };
97 
98 
102  unsigned int
103  get_num_of_mbs() const;
104 
105 
109  std::map<unsigned int, cofmeter_band_drop>&
110  set_mbs_drop() { return mbs_drop; };
111 
112 
116  const std::map<unsigned int, cofmeter_band_drop>&
117  get_mbs_drop() const { return mbs_drop; };
118 
119 
123  std::map<unsigned int, cofmeter_band_dscp_remark>&
124  set_mbs_dscp_remark() { return mbs_dscp_remark; };
125 
126 
130  const std::map<unsigned int, cofmeter_band_dscp_remark>&
131  get_mbs_dscp_remark() const { return mbs_dscp_remark; };
132 
133 
137  std::map<unsigned int, cofmeter_band_experimenter>&
138  set_mbs_experimenter() { return mbs_experimenter; };
139 
140 
144  const std::map<unsigned int, cofmeter_band_experimenter>&
145  get_mbs_experimenter() const { return mbs_experimenter; };
146 
147 
148  // cofmeter_band_drop
149 
154  add_meter_band_drop(
155  unsigned int index = 0);
156 
157 
161  void
162  drop_meter_band_drop(
163  unsigned int index = 0);
164 
165 
170  set_meter_band_drop(
171  unsigned int index = 0);
172 
173 
177  const cofmeter_band_drop&
178  get_meter_band_drop(
179  unsigned int index = 0) const;
180 
181 
185  bool
186  has_meter_band_drop(
187  unsigned int index = 0) const;
188 
189 
190  // cofmeter_band_dscp_remark
191 
196  add_meter_band_dscp_remark(
197  unsigned int index = 0);
198 
199 
203  void
204  drop_meter_band_dscp_remark(
205  unsigned int index = 0);
206 
207 
212  set_meter_band_dscp_remark(
213  unsigned int index = 0);
214 
215 
220  get_meter_band_dscp_remark(
221  unsigned int index = 0) const;
222 
223 
227  bool
228  has_meter_band_dscp_remark(
229  unsigned int index = 0) const;
230 
231 
232 
233  // cofmeter_band_experimenter
234 
239  add_meter_band_experimenter(
240  unsigned int index = 0);
241 
242 
246  void
247  drop_meter_band_experimenter(
248  unsigned int index = 0);
249 
250 
255  set_meter_band_experimenter(
256  unsigned int index = 0);
257 
258 
263  get_meter_band_experimenter(
264  unsigned int index = 0) const;
265 
266 
270  bool
271  has_meter_band_experimenter(
272  unsigned int index = 0) const;
273 
274 
275 
276 public:
277 
278 
282  virtual size_t
283  length() const;
284 
285 
289  virtual void
290  pack(
291  uint8_t *buf, size_t buflen);
292 
293 
297  virtual void
298  unpack(
299  uint8_t *buf, size_t buflen);
300 
301 
302 public:
303 
304 
305  friend std::ostream&
306  operator<< (std::ostream& os, const cofmeter_bands& mbs) {
307  os << rofl::indent(0) << "<cofmeterbands version: " << (int)mbs.get_version()
308  << " #meter-bands: " << mbs.get_num_of_mbs() << " >" << std::endl;
309  rofl::indent i(2);
310  // drop
311  for (std::map<unsigned int, cofmeter_band_drop>::const_iterator
312  it = mbs.get_mbs_drop().begin(); it != mbs.get_mbs_drop().end(); ++it) {
313  os << it->second;
314  }
315  // dscp_remark
316  for (std::map<unsigned int, cofmeter_band_dscp_remark>::const_iterator
317  it = mbs.get_mbs_dscp_remark().begin(); it != mbs.get_mbs_dscp_remark().end(); ++it) {
318  os << it->second;
319  }
320  // experimenter
321  for (std::map<unsigned int, cofmeter_band_experimenter>::const_iterator
322  it = mbs.get_mbs_experimenter().begin(); it != mbs.get_mbs_experimenter().end(); ++it) {
323  os << it->second;
324  }
325  return os;
326  };
327 
328 
329 private:
330 
331  uint8_t of_version;
332  std::map<unsigned int, cofmeter_band_drop> mbs_drop;
333  std::map<unsigned int, cofmeter_band_dscp_remark> mbs_dscp_remark;
334  std::map<unsigned int, cofmeter_band_experimenter> mbs_experimenter;
335 };
336 
337 }; // end of namespace openflow
338 }; // end of namespace rofl
339 
340 #endif /* COFMETERBANDS_H_ */
Definition: cofmeterband.h:289
Definition: cofmeterband.h:228
Definition: cofmeterbands.h:24
Definition: cofmeterbands.h:22
Definition: cofmeterband.h:393
Definition: logging.h:76
Definition: cofmeterbands.h:21
Definition: croflexception.h:27