Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
coxmatch.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 /*
6  * coxmatch.h
7  *
8  * Created on: 10.07.2012
9  * Author: andreas
10  */
11 
12 #ifndef COXMATCH_H_
13 #define COXMATCH_H_
14 
15 #include <string>
16 #include <ostream>
17 #include <endian.h>
18 #include <pthread.h>
19 #ifndef htobe16
20  #include "../endian_conversion.h"
21 #endif
22 
23 #include "rofl/common/openflow/openflow.h"
24 #include "rofl/common/croflexception.h"
25 #include "rofl/common/cmemory.h"
26 #include "rofl/common/caddress.h"
27 #include "rofl/common/fframe.h"
28 #include "rofl/common/logging.h"
29 #include "rofl/common/thread_helper.h"
30 
31 namespace rofl {
32 namespace openflow {
33 
34 /* error classes */
35 class eOxmBase : public RoflException {}; // error base class for class cofinstruction
36 class eOxmInval : public eOxmBase {}; // invalid parameter
37 class eOxmNotFound : public eOxmBase {}; // not found
38 class eOxmBadLen : public eOxmBase {}; // bad length
39 class eOxmInvalType : public eOxmBase {}; // invalid OXM TLV field value
40 class eOxmInvalClass : public eOxmBase {}; // invalid OXM TLV class value
41 class eOxmHeaderInval : public eOxmBase {}; // invalid instruction header
42 class eOxmActionNotFound : public eOxmBase {}; // action not found in instruction
43 class eOxmBadExperimenter : public eOxmBase {}; // unknown experimenter instruction
44 
45 
49 class coxmatch :
50  public rofl::cmemory
51 {
52  PthreadRwLock oxmlock;
53 
54 public:
55 
59  coxmatch();
60 
64  coxmatch(
65  uint32_t oxm_id);
66 
70  coxmatch(
71  uint8_t* oxm_hdr, size_t oxm_len);
72 
76  coxmatch(
77  uint32_t oxm_id, uint8_t value);
78 
82  coxmatch(
83  uint32_t oxm_id, uint8_t value, uint8_t mask);
84 
88  coxmatch(
89  uint32_t oxm_id, uint16_t value);
90 
94  coxmatch(
95  uint32_t oxm_id, uint16_t value, uint16_t mask);
96 
100  coxmatch(
101  uint32_t oxm_id, uint32_t value);
102 
106  coxmatch(
107  uint32_t oxm_id, uint32_t value, uint32_t mask);
108 
112  coxmatch(
113  uint32_t oxm_id, uint64_t value);
114 
118  coxmatch(
119  uint32_t oxm_id, uint64_t value, uint64_t mask);
120 
124  coxmatch(
125  uint32_t oxm_id, rofl::caddress_in4 const& value);
126 
130  coxmatch(
131  uint32_t oxm_id, rofl::caddress_in4 const& value, rofl::caddress_in4 const& mask);
132 
136  coxmatch(
137  uint32_t oxm_id, rofl::caddress_in6 const& value);
138 
142  coxmatch(
143  uint32_t oxm_id, rofl::caddress_in6 const& value, rofl::caddress_in6 const& mask);
144 
148  coxmatch(
149  uint32_t oxm_id, rofl::cmacaddr const& value);
150 
154  coxmatch(
155  uint32_t oxm_id, rofl::cmacaddr const& value, rofl::cmacaddr const& mask);
156 
160  coxmatch(
161  coxmatch const& oxm);
162 
166  virtual
167  ~coxmatch();
168 
172  coxmatch&
173  operator= (
174  coxmatch const& oxm);
175 
179  bool
180  operator== (
181  coxmatch const& oxm) const;
182 
186  bool
187  operator!= (
188  coxmatch const& oxm) const;
189 
193  bool
194  operator< (
195  coxmatch const& oxm);
196 
197 public:
198 
202  virtual void
203  clear() { rofl::cmemory::clear(); };
204 
208  virtual size_t
209  length() const;
210 
214  virtual void
215  pack(
216  uint8_t* buf, size_t buflen);
217 
221  virtual void
222  unpack(
223  uint8_t* buf, size_t buflen);
224 
228  void
229  set_oxm_id(
230  uint32_t oxm_id);
231 
232 
236  uint32_t
237  get_oxm_id() const;
238 
242  void
243  set_oxm_class(
244  uint16_t oxm_class);
245 
249  uint16_t
250  get_oxm_class() const;
251 
255  void
256  set_oxm_field(
257  uint8_t oxm_field);
258 
262  uint8_t
263  get_oxm_field() const;
264 
268  void
269  set_oxm_hasmask(
270  bool oxm_hasmask);
271 
275  bool
276  get_oxm_hasmask() const;
277 
281  void
282  set_oxm_length(
283  uint8_t oxm_len);
284 
288  uint8_t
289  get_oxm_length();
290 
291 public:
292 
293  uint8_t get_u8value() const;
294  uint8_t get_u8mask() const;
295  uint8_t get_u8masked_value() const;
296 
297  uint16_t get_u16value() const;
298  uint16_t get_u16mask() const;
299  uint16_t get_u16masked_value() const;
300 
301  uint32_t get_u32value() const;
302  uint32_t get_u32mask() const;
303  uint32_t get_u32masked_value() const;
304 
305  rofl::caddress_in4 get_u32value_as_addr() const;
306  rofl::caddress_in4 get_u32mask_as_addr() const;
307  rofl::caddress_in4 get_u32masked_value_as_addr() const;
308 
309  rofl::cmacaddr get_u48value() const;
310  rofl::cmacaddr get_u48mask() const;
311  rofl::cmacaddr get_u48masked_value() const;
312 
313  uint64_t get_u64value() const;
314  uint64_t get_u64mask() const;
315  uint64_t get_u64masked_value() const;
316 
317  rofl::caddress_in6 get_u128value() const;
318  rofl::caddress_in6 get_u128mask() const;
319  rofl::caddress_in6 get_u128masked_value() const;
320 
321  void set_u8value(uint8_t value);
322  void set_u8mask(uint8_t mask);
323 
324  void set_u16value(uint16_t value);
325  void set_u16mask(uint16_t mask);
326 
327  void set_u32value(uint32_t value);
328  void set_u32mask(uint32_t mask);
329 
330  void set_u32value(rofl::caddress_in4 const& addr);
331  void set_u32mask(rofl::caddress_in4 const& mask);
332 
333  void set_u48value(rofl::cmacaddr const& addr);
334  void set_u48mask(rofl::cmacaddr const& mask);
335 
336  void set_u64value(uint64_t value);
337  void set_u64mask(uint64_t mask);
338 
339  void set_u128value(rofl::caddress_in6 const& addr);
340  void set_u128mask(rofl::caddress_in6 const& mask);
341 
342 
343 public:
344 
348  friend std::ostream&
349  operator<< (std::ostream& os, coxmatch const& oxm) {
350  os << rofl::indent(0) << "<coxmatch oxm-id: 0x" << std::hex << oxm.get_oxm_id() << std::dec << " >" << std::endl;
351  rofl::indent i(2);
352  os << dynamic_cast<rofl::cmemory const&>( oxm );
353  return os;
354  };
355 
356 };
357 
358 
360 {
361  uint16_t oxm_class;
362  uint8_t oxm_field;
363 public:
368  uint16_t oxm_class,
369  uint8_t oxm_field) :
370  oxm_class(oxm_class), oxm_field(oxm_field) {};
374  bool
375  operator() (
376  uint16_t __oxm_class,
377  uint8_t __oxm_field) const
378  {
379  return ((oxm_class == __oxm_class) && (oxm_field == __oxm_field));
380  };
381 
385  bool
386  operator() (
387  coxmatch const& match) const
388  {
389  return ((oxm_class == match.get_oxm_class()) &&
390  (oxm_field == match.get_oxm_field()));
391  };
392 };
393 
394 
399 public:
401  uint32_t port_no) :
402  coxmatch(rofl::openflow::OXM_TLV_BASIC_IN_PORT, port_no) {};
404  coxmatch const& oxm) :
405  coxmatch(oxm) {};
406  virtual
407  ~coxmatch_ofb_in_port() {};
408  friend std::ostream&
409  operator<< (std::ostream& os, coxmatch_ofb_in_port const& oxm) {
410  os << dynamic_cast<coxmatch const&>(oxm);
411  os << indent(2) << "<in-port: " << std::hex << (int)oxm.get_u32value() << std::dec << " >" << std::endl;
412  return os;
413  };
414 };
415 
416 
421 public:
423  uint32_t port_no) :
424  coxmatch(rofl::openflow::OXM_TLV_BASIC_IN_PHY_PORT, port_no) {};
426  coxmatch const& oxm) :
427  coxmatch(oxm) {};
428  virtual
430  friend std::ostream&
431  operator<< (std::ostream& os, coxmatch_ofb_in_phy_port const& oxm) {
432  os << dynamic_cast<coxmatch const&>(oxm);
433  os << indent(2) << "<in-phy-port: " << std::hex << (int)oxm.get_u32value() << std::dec << " >" << std::endl;
434  return os;
435  };
436 };
437 
438 
443 public:
445  uint64_t metadata) :
446  coxmatch(rofl::openflow::OXM_TLV_BASIC_METADATA, metadata) {};
448  uint64_t metadata, uint64_t mask) :
449  coxmatch(rofl::openflow::OXM_TLV_BASIC_METADATA_MASK, metadata, mask) {};
451  coxmatch const& oxm) :
452  coxmatch(oxm) {};
453  virtual
454  ~coxmatch_ofb_metadata() {};
455  friend std::ostream&
456  operator<< (std::ostream& os, coxmatch_ofb_metadata const& oxm) {
457  os << dynamic_cast<coxmatch const&>(oxm);
458  os << std::hex;
459  os << indent(2) << "<metadata: "
460  << (unsigned long long)oxm.get_u64value() << "/" << (unsigned long long)oxm.get_u64mask()
461  << std::dec
462  << " >" << std::endl;
463  return os;
464  };
465 };
466 
467 
472 public:
474  cmacaddr const& maddr) :
475  coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_DST, maddr) {};
477  cmacaddr const& maddr, cmacaddr const& mask) :
478  coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_DST_MASK, maddr, mask) {};
480  coxmatch const& oxm) :
481  coxmatch(oxm) {};
482  virtual
483  ~coxmatch_ofb_eth_dst() {};
484  friend std::ostream&
485  operator<< (std::ostream& os, coxmatch_ofb_eth_dst const& oxm) {
486  os << dynamic_cast<coxmatch const&>(oxm);
487  os << indent(2) << "<eth-dst value: >" << std::endl;
488  { rofl::indent i(4); os << oxm.get_u48value(); }
489  os << indent(2) << "<eth-dst mask: >" << std::endl;
490  { rofl::indent i(4); os << oxm.get_u48mask(); }
491  return os;
492  };
493 };
494 
495 
500 public:
502  cmacaddr const& maddr) :
503  coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_SRC, maddr) {};
505  cmacaddr const& maddr, cmacaddr const& mask) :
506  coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_SRC_MASK, maddr, mask) {};
508  coxmatch const& oxm) : coxmatch(oxm) {};
509  virtual
510  ~coxmatch_ofb_eth_src() {};
511  friend std::ostream&
512  operator<< (std::ostream& os, coxmatch_ofb_eth_src const& oxm) {
513  os << dynamic_cast<coxmatch const&>(oxm);
514  os << indent(2) << "<eth-src value: >" << std::endl;
515  { rofl::indent i(4); os << oxm.get_u48value(); }
516  os << indent(2) << "<eth-src mask: >" << std::endl;
517  { rofl::indent i(4); os << oxm.get_u48mask(); }
518  return os;
519  };
520 };
521 
522 
527 public:
529  uint16_t dl_type) :
530  coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_TYPE, dl_type) {};
532  coxmatch const& oxm) :
533  coxmatch(oxm) {};
534  virtual
535  ~coxmatch_ofb_eth_type() {};
536  friend std::ostream&
537  operator<< (std::ostream& os, coxmatch_ofb_eth_type const& oxm) {
538  os << dynamic_cast<coxmatch const&>(oxm);
539  os << indent(2) << "<eth-type: 0x" << std::hex << (int)oxm.get_u16value() << std::dec << " >" << std::endl;
540  return os;
541  };
542 };
543 
544 
549 public:
551  uint16_t vid) :
552  coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID, vid) {};
554  uint16_t vid, uint16_t mask) :
555  coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID_MASK, vid, mask) {};
557  coxmatch const& oxm) : coxmatch(oxm) {};
558  virtual
559  ~coxmatch_ofb_vlan_vid() {};
560  friend std::ostream&
561  operator<< (std::ostream& os, coxmatch_ofb_vlan_vid const& oxm) {
562  os << dynamic_cast<coxmatch const&>(oxm);
563  os << rofl::indent(2) << "<coxmatch_ofb_vlan_vid >" << std::endl;
564  os << rofl::indent(4) << "<vlan-vid: 0x" << std::hex << (int)oxm.get_u16value() << "/0x" << (int)oxm.get_u16mask() << std::dec << " >" << std::endl;
565  return os;
566  };
567 };
568 
569 
574 public:
576  coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID,
577  (uint16_t)rofl::openflow::OFPVID_NONE) {};
579  coxmatch const& oxm) :
580  coxmatch(oxm) {};
581  virtual
583  friend std::ostream&
584  operator<< (std::ostream& os, coxmatch_ofb_vlan_untagged const& oxm) {
585  os << dynamic_cast<coxmatch_ofb_vlan_vid const&>(oxm);
586  os << rofl::indent(2) << "<vlan-untagged >" << std::endl;
587  return os;
588  };
589 };
590 
591 
596 public:
598  coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID_MASK,
599  (uint16_t)rofl::openflow::OFPVID_PRESENT,
600  (uint16_t)rofl::openflow::OFPVID_PRESENT) {};
602  coxmatch const& oxm) :
603  coxmatch(oxm) {};
604  virtual
606  friend std::ostream&
607  operator<< (std::ostream& os, coxmatch_ofb_vlan_present const& oxm) {
608  os << dynamic_cast<coxmatch_ofb_vlan_vid const&>(oxm);
609  os << rofl::indent(2) << "<vlan-present >" << std::endl;
610  return os;
611  };
612 };
613 
614 
619 public:
621  uint8_t pcp) :
622  coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_PCP, pcp) {};
624  coxmatch const& oxm) :
625  coxmatch(oxm) {};
626  virtual
627  ~coxmatch_ofb_vlan_pcp() {};
628  friend std::ostream&
629  operator<< (std::ostream& os, coxmatch_ofb_vlan_pcp const& oxm) {
630  os << dynamic_cast<coxmatch const&>(oxm);
631  os << indent(2) << "<vlan-pcp: " << (int)oxm.get_u8value() << " >" << std::endl;
632  return os;
633  };
634 };
635 
636 
641 public:
643  uint8_t dscp) :
644  coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_DSCP, dscp) {};
646  coxmatch const& oxm) :
647  coxmatch(oxm) {};
648  virtual
649  ~coxmatch_ofb_ip_dscp() {};
650  friend std::ostream&
651  operator<< (std::ostream& os, coxmatch_ofb_ip_dscp const& oxm) {
652  os << dynamic_cast<coxmatch const&>(oxm);
653  os << indent(2) << "<ip-dscp: " << (int)oxm.get_u8value() << " >" << std::endl;
654  return os;
655  };
656 };
657 
658 
663 public:
665  uint8_t ecn) :
666  coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_ECN, ecn) {};
668  coxmatch const& oxm) :
669  coxmatch(oxm) {};
670  virtual
671  ~coxmatch_ofb_ip_ecn() {};
672  friend std::ostream&
673  operator<< (std::ostream& os, coxmatch_ofb_ip_ecn const& oxm) {
674  os << dynamic_cast<coxmatch const&>(oxm);
675  os << indent(2) << "<ip-ecn: " << (int)oxm.get_u8value() << " >" << std::endl;
676  return os;
677  };
678 };
679 
680 
685 public:
687  uint8_t proto) :
688  coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_PROTO, proto) {};
690  coxmatch const& oxm) :
691  coxmatch(oxm) {};
692  virtual
693  ~coxmatch_ofb_ip_proto() {};
694  friend std::ostream&
695  operator<< (std::ostream& os, coxmatch_ofb_ip_proto const& oxm) {
696  os << dynamic_cast<coxmatch const&>(oxm);
697  os << indent(2) << "<ip-proto: " << (int)oxm.get_u8value() << " >" << std::endl;
698  return os;
699  };
700 };
701 
702 
707 public:
709  uint32_t src) :
710  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC, src) {};
712  uint32_t src, uint32_t mask) :
713  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC_MASK, src, mask) {};
715  rofl::caddress_in4 const& src) :
716  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC, src) {};
718  rofl::caddress_in4 const& src, rofl::caddress_in4 const& mask) :
719  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC_MASK, src, mask) {};
721  coxmatch const& oxm) :
722  coxmatch(oxm) {};
723  virtual
724  ~coxmatch_ofb_ipv4_src() {};
725  friend std::ostream&
726  operator<< (std::ostream& os, coxmatch_ofb_ipv4_src const& oxm) {
727  os << dynamic_cast<coxmatch const&>(oxm);
728  os << indent(2) << "<ipv4-src value: >" << std::endl;
729  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
730  os << indent(2) << "<ipv4-src mask: >" << std::endl;
731  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
732  return os;
733  };
734 };
735 
736 
741 public:
743  uint32_t dst) :
744  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST, dst) {};
746  uint32_t dst, uint32_t mask) :
747  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST_MASK, dst, mask) {};
749  caddress_in4 const& dst) :
750  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST, dst) {};
752  caddress_in4 const& dst, caddress_in4 const& mask) :
753  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST_MASK, dst, mask) {};
755  coxmatch const& oxm) :
756  coxmatch(oxm) {};
757  virtual
758  ~coxmatch_ofb_ipv4_dst() {};
759  friend std::ostream&
760  operator<< (std::ostream& os, coxmatch_ofb_ipv4_dst const& oxm) {
761  os << dynamic_cast<coxmatch const&>(oxm);
762  os << indent(2) << "<ipv4-dst value: >" << std::endl;
763  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
764  os << indent(2) << "<ipv4-dst mask: >" << std::endl;
765  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
766  return os;
767  };
768 };
769 
770 
775 public:
777  rofl::caddress_in6 const& src) :
778  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_SRC, src) {};
780  rofl::caddress_in6 const& src, rofl::caddress_in6 const& mask) :
781  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_SRC_MASK, src, mask) {};
783  coxmatch const& oxm) :
784  coxmatch(oxm) {};
785  virtual
786  ~coxmatch_ofb_ipv6_src() {};
787  friend std::ostream&
788  operator<< (std::ostream& os, coxmatch_ofb_ipv6_src const& oxm) {
789  os << dynamic_cast<coxmatch const&>(oxm);
790  rofl::indent i(2);
791  os << rofl::indent(0) << "<ipv6-src value: > " << std::endl;
792  { rofl::indent i(2); os << oxm.get_u128value(); }
793  os << rofl::indent(0) << "<ipv6-src mask: > " << std::endl;
794  { rofl::indent i(2); os << oxm.get_u128mask(); }
795  return os;
796  };
797 };
798 
799 
804 public:
806  rofl::caddress_in6 const& dst) :
807  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_DST, dst) {};
809  rofl::caddress_in6 const& dst, rofl::caddress_in6 const& mask) :
810  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_DST_MASK, dst, mask) {};
812  coxmatch const& oxm) :
813  coxmatch(oxm) {};
814  virtual
815  ~coxmatch_ofb_ipv6_dst() {};
816  friend std::ostream&
817  operator<< (std::ostream& os, coxmatch_ofb_ipv6_dst const& oxm) {
818  os << dynamic_cast<coxmatch const&>(oxm);
819  rofl::indent i(2);
820  os << rofl::indent(0) << "<ipv6-dst value: >" << std::endl;
821  { rofl::indent i(2); os << oxm.get_u128value(); }
822  os << rofl::indent(0) << "<ipv6-dst mask: > " << std::endl;
823  { rofl::indent i(2); os << oxm.get_u128mask(); }
824  return os;
825  };
826 };
827 
828 
833 public:
835  rofl::caddress_in6 const& nd_target) :
836  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TARGET, nd_target) {};
838  coxmatch const& oxm) :
839  coxmatch(oxm) {};
840  virtual
842  friend std::ostream&
843  operator<< (std::ostream& os, coxmatch_ofb_ipv6_nd_target const& oxm) {
844  os << dynamic_cast<coxmatch const&>(oxm);
845  rofl::indent i(2);
846  os << rofl::indent(0) << "<ipv6-nd-target value: > " << std::endl;
847  { rofl::indent i(2); os << oxm.get_u128value(); }
848  return os;
849  };
850 };
851 
852 
857 public:
859  uint16_t src) :
860  coxmatch(rofl::openflow::OXM_TLV_BASIC_TCP_SRC, src) {};
862  coxmatch const& oxm) :
863  coxmatch(oxm) {};
864  virtual
865  ~coxmatch_ofb_tcp_src() {};
866  friend std::ostream&
867  operator<< (std::ostream& os, coxmatch_ofb_tcp_src const& oxm) {
868  os << dynamic_cast<coxmatch const&>(oxm);
869  os << indent(2) << "<tcp-src: "
870  << (int)oxm.get_u16value()
871  << " >" << std::endl;
872  return os;
873  };
874 };
875 
876 
881 public:
883  uint16_t dst) :
884  coxmatch(rofl::openflow::OXM_TLV_BASIC_TCP_DST, dst) {};
886  coxmatch const& oxm) :
887  coxmatch(oxm) {};
888  virtual
889  ~coxmatch_ofb_tcp_dst() {};
890  friend std::ostream&
891  operator<< (std::ostream& os, coxmatch_ofb_tcp_dst const& oxm) {
892  os << dynamic_cast<coxmatch const&>(oxm);
893  os << indent(2) << "<tcp-dst: "
894  << (int)oxm.get_u16value()
895  << " >" << std::endl;
896  return os;
897  };
898 };
899 
900 
905 public:
907  uint16_t src) :
908  coxmatch(rofl::openflow::OXM_TLV_BASIC_UDP_SRC, src) {};
910  coxmatch const& oxm) :
911  coxmatch(oxm) {};
912  virtual
913  ~coxmatch_ofb_udp_src() {};
914  friend std::ostream&
915  operator<< (std::ostream& os, coxmatch_ofb_udp_src const& oxm) {
916  os << dynamic_cast<coxmatch const&>(oxm);
917  os << indent(2) << "<udp-src: "
918  << (int)oxm.get_u16value()
919  << " >" << std::endl;
920  return os;
921  };
922 };
923 
924 
929 public:
931  uint16_t dst) :
932  coxmatch(rofl::openflow::OXM_TLV_BASIC_UDP_DST, dst) {};
934  coxmatch const& oxm) :
935  coxmatch(oxm) {};
936  virtual
937  ~coxmatch_ofb_udp_dst() {};
938  friend std::ostream&
939  operator<< (std::ostream& os, coxmatch_ofb_udp_dst const& oxm) {
940  os << dynamic_cast<coxmatch const&>(oxm);
941  os << indent(2) << "<udp-dst: "
942  << (int)oxm.get_u16value()
943  << " >" << std::endl;
944  return os;
945  };
946 };
947 
948 
953 public:
955  uint16_t src) :
956  coxmatch(rofl::openflow::OXM_TLV_BASIC_SCTP_SRC, src) {};
958  coxmatch const& oxm) :
959  coxmatch(oxm) {};
960  virtual
961  ~coxmatch_ofb_sctp_src() {};
962  friend std::ostream&
963  operator<< (std::ostream& os, coxmatch_ofb_sctp_src const& oxm) {
964  os << dynamic_cast<coxmatch const&>(oxm);
965  os << indent(2) << "<sctp-src: "
966  << (int)oxm.get_u16value()
967  << " >" << std::endl;
968  return os;
969  };
970 };
971 
972 
977 public:
979  uint16_t dst) :
980  coxmatch(rofl::openflow::OXM_TLV_BASIC_SCTP_DST, dst) {};
982  coxmatch const& oxm) :
983  coxmatch(oxm) {};
984  virtual
985  ~coxmatch_ofb_sctp_dst() {};
986  friend std::ostream&
987  operator<< (std::ostream& os, coxmatch_ofb_sctp_dst const& oxm) {
988  os << dynamic_cast<coxmatch const&>(oxm);
989  os << indent(2) << "<sctp-dst: "
990  << (int)oxm.get_u16value()
991  << " >" << std::endl;
992  return os;
993  };
994 };
995 
996 
1001 public:
1003  uint8_t type) :
1004  coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV4_TYPE, type) {};
1006  coxmatch const& oxm) :
1007  coxmatch(oxm) {};
1008  virtual
1010  friend std::ostream&
1011  operator<< (std::ostream& os, coxmatch_ofb_icmpv4_type const& oxm) {
1012  os << dynamic_cast<coxmatch const&>(oxm);
1013  os << indent(2) << "<icmpv4-type: "
1014  << (int)oxm.get_u8value()
1015  << " >" << std::endl;
1016  return os;
1017  };
1018 };
1019 
1020 
1025 public:
1027  uint8_t code) :
1028  coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV4_CODE, code) {};
1030  coxmatch const& oxm) :
1031  coxmatch(oxm) {};
1032  virtual
1034  friend std::ostream&
1035  operator<< (std::ostream& os, coxmatch_ofb_icmpv4_code const& oxm) {
1036  os << dynamic_cast<coxmatch const&>(oxm);
1037  os << indent(2) << "<icmpv4-code: "
1038  << (int)oxm.get_u8value()
1039  << " >" << std::endl;
1040  return os;
1041  };
1042 };
1043 
1044 
1049 public:
1051  uint16_t opcode) :
1052  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_OP, opcode) {};
1054  coxmatch const& oxm) :
1055  coxmatch(oxm) {};
1056  virtual
1058  friend std::ostream&
1059  operator<< (std::ostream& os, coxmatch_ofb_arp_opcode const& oxm) {
1060  os << dynamic_cast<coxmatch const&>(oxm);
1061  os << indent(2) << "<arp-opcode: "
1062  << (int)oxm.get_u16value()
1063  << " >" << std::endl;
1064  return os;
1065  };
1066 };
1067 
1068 
1069 
1074 public:
1076  uint32_t spa) :
1077  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA, spa) {};
1079  uint32_t spa, uint32_t mask) :
1080  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA_MASK, spa, mask) {};
1082  caddress_in4 const& spa) :
1083  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA, spa) {};
1085  caddress_in4 const& spa, caddress_in4 const& mask) :
1086  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA_MASK, spa, mask) {};
1088  coxmatch const& oxm) :
1089  coxmatch(oxm) {};
1090  virtual
1091  ~coxmatch_ofb_arp_spa() {};
1092  friend std::ostream&
1093  operator<< (std::ostream& os, coxmatch_ofb_arp_spa const& oxm) {
1094  os << dynamic_cast<coxmatch const&>(oxm);
1095  os << indent(2) << "<arp-spa value: >" << std::endl;
1096  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
1097  os << indent(2) << "<arp-spa mask: >" << std::endl;
1098  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
1099  return os;
1100  };
1101 };
1102 
1103 
1104 
1109 public:
1111  uint32_t tpa) :
1112  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA, tpa) {};
1114  uint32_t tpa, uint32_t mask) :
1115  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA_MASK, tpa, mask) {};
1117  caddress_in4 const& tpa) :
1118  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA, tpa) {};
1120  caddress_in4 const& tpa, caddress_in4 const& mask) :
1121  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA_MASK, tpa, mask) {};
1123  coxmatch const& oxm) :
1124  coxmatch(oxm) {};
1125  virtual
1126  ~coxmatch_ofb_arp_tpa() {};
1127  friend std::ostream&
1128  operator<< (std::ostream& os, coxmatch_ofb_arp_tpa const& oxm) {
1129  os << dynamic_cast<coxmatch const&>(oxm);
1130  os << indent(2) << "<arp-tpa value: >" << std::endl;
1131  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
1132  os << indent(2) << "<arp-tpa mask: >" << std::endl;
1133  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
1134  return os;
1135  };
1136 };
1137 
1138 
1143 public:
1145  cmacaddr const& maddr) :
1146  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SHA, maddr) {};
1148  cmacaddr const& maddr, cmacaddr const& mask) :
1149  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SHA_MASK, maddr, mask) {};
1151  coxmatch const& oxm) :
1152  coxmatch(oxm) {};
1153  virtual
1154  ~coxmatch_ofb_arp_sha() {};
1155  friend std::ostream&
1156  operator<< (std::ostream& os, coxmatch_ofb_arp_sha const& oxm) {
1157  os << dynamic_cast<coxmatch const&>(oxm);
1158  os << indent(2) << "<arp-sha value: >" << std::endl;
1159  { rofl::indent i(4); os << oxm.get_u48value(); }
1160  os << indent(2) << "<arp-sha mask: >" << std::endl;
1161  { rofl::indent i(4); os << oxm.get_u48mask(); }
1162  return os;
1163  };
1164 };
1165 
1166 
1167 
1172 public:
1174  cmacaddr const& maddr) :
1175  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_THA, maddr) {};
1177  cmacaddr const& maddr, cmacaddr const& mask) :
1178  coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_THA_MASK, maddr, mask) {};
1180  coxmatch const& oxm) :
1181  coxmatch(oxm) {};
1182  virtual
1183  ~coxmatch_ofb_arp_tha() {};
1184  friend std::ostream&
1185  operator<< (std::ostream& os, coxmatch_ofb_arp_tha const& oxm) {
1186  os << dynamic_cast<coxmatch const&>(oxm);
1187  os << indent(2) << "<arp-tha value: >" << std::endl;
1188  { rofl::indent i(4); os << oxm.get_u48value(); }
1189  os << indent(2) << "<arp-tha mask: >" << std::endl;
1190  { rofl::indent i(4); os << oxm.get_u48mask(); }
1191 
1192  return os;
1193  };
1194 };
1195 
1196 
1201 public:
1205  uint32_t flow_label) :
1206  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_FLABEL, flow_label) {};
1208  uint32_t flow_label, uint32_t mask) :
1209  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_FLABEL_MASK, flow_label, mask) {};
1211  coxmatch const& oxm) :
1212  coxmatch(oxm) {};
1213  virtual
1215  friend std::ostream&
1216  operator<< (std::ostream& os, coxmatch_ofb_ipv6_flabel const& oxm) {
1217  os << dynamic_cast<coxmatch const&>(oxm);
1218  os << indent(2) << "<ipv6-flabel: 0x" << std::hex
1219  << (int)oxm.get_u32value() << "/0x" << (int)oxm.get_u32mask()
1220  << std::dec << " >" << std::endl;
1221  return os;
1222  };
1223 };
1224 
1225 
1230 public:
1232  uint8_t type) :
1233  coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV6_TYPE, type) {};
1235  coxmatch const& oxm) :
1236  coxmatch(oxm) {};
1237  virtual
1239  friend std::ostream&
1240  operator<< (std::ostream& os, coxmatch_ofb_icmpv6_type const& oxm) {
1241  os << dynamic_cast<coxmatch const&>(oxm);
1242  os << indent(2) << "<icmpv6-type: "
1243  << (int)oxm.get_u8value()
1244  << " >" << std::endl;
1245  return os;
1246  };
1247 };
1248 
1249 
1254 public:
1256  uint8_t code) :
1257  coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV6_CODE, code) {};
1259  coxmatch const& oxm) :
1260  coxmatch(oxm) {};
1261  virtual
1263  friend std::ostream&
1264  operator<< (std::ostream& os, coxmatch_ofb_icmpv6_code const& oxm) {
1265  os << dynamic_cast<coxmatch const&>(oxm);
1266  os << indent(2) << "<icmpv6-code: "
1267  << (int)oxm.get_u8value()
1268  << " >" << std::endl;
1269  return os;
1270  };
1271 };
1272 
1273 
1274 
1279 public:
1281  cmacaddr const& addr) :
1282  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_SLL, addr) {};
1284  coxmatch const& oxm) :
1285  coxmatch(oxm) {};
1286  virtual
1288  friend std::ostream&
1289  operator<< (std::ostream& os, coxmatch_ofb_ipv6_nd_sll const& oxm) {
1290  os << dynamic_cast<coxmatch const&>(oxm);
1291  os << indent(2) << "<ipv6-nd-sll value: >" << std::endl;
1292  { rofl::indent i(4); os << oxm.get_u48value(); }
1293  os << indent(2) << "<ipv6-nd-sll mask: >" << std::endl;
1294  { rofl::indent i(4); os << oxm.get_u48mask(); }
1295  return os;
1296  };
1297 };
1298 
1299 
1304 public:
1306  cmacaddr const& addr) :
1307  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TLL, addr) {};
1309  coxmatch const& oxm) :
1310  coxmatch(oxm) {};
1311  virtual
1313  friend std::ostream&
1314  operator<< (std::ostream& os, coxmatch_ofb_ipv6_nd_tll const& oxm) {
1315  os << dynamic_cast<coxmatch const&>(oxm);
1316  os << indent(2) << "<ipv6-nd-tll value: >" << std::endl;
1317  { rofl::indent i(4); os << oxm.get_u48value(); }
1318  os << indent(2) << "<ipv6-nd-tll mask: >" << std::endl;
1319  { rofl::indent i(4); os << oxm.get_u48mask(); }
1320  return os;
1321  };
1322 };
1323 
1324 
1329 public:
1331  uint32_t mpls_label) :
1332  coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_LABEL, mpls_label) {};
1334  coxmatch const& oxm) :
1335  coxmatch(oxm) {};
1336  virtual
1338  friend std::ostream&
1339  operator<< (std::ostream& os, coxmatch_ofb_mpls_label const& oxm) {
1340  os << dynamic_cast<coxmatch const&>(oxm);
1341  os << indent(2) << "<mpls-label: 0x"
1342  << std::hex << (int)oxm.get_u32value() << std::dec
1343  << " >" << std::endl;
1344  return os;
1345  };
1346 };
1347 
1348 
1353 public:
1355  uint8_t mpls_tc) :
1356  coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_TC, mpls_tc) {};
1358  coxmatch const& oxm) :
1359  coxmatch(oxm) {};
1360  virtual
1361  ~coxmatch_ofb_mpls_tc() {};
1362  friend std::ostream&
1363  operator<< (std::ostream& os, coxmatch_ofb_mpls_tc const& oxm) {
1364  os << dynamic_cast<coxmatch const&>(oxm);
1365  os << indent(2) << "<mpls-tc: "
1366  << (int)oxm.get_u8value()
1367  << " >" << std::endl;
1368  return os;
1369  };
1370 };
1371 
1372 
1377 public:
1379  uint8_t mpls_bos) :
1380  coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_BOS, mpls_bos) {};
1382  coxmatch const& oxm) :
1383  coxmatch(oxm) {};
1384  virtual
1385  ~coxmatch_ofb_mpls_bos() {};
1386  friend std::ostream&
1387  operator<< (std::ostream& os, coxmatch_ofb_mpls_bos const& oxm) {
1388  os << dynamic_cast<coxmatch const&>(oxm);
1389  os << indent(2) << "<mpls-bos: "
1390  << (int)oxm.get_u8value()
1391  << " >" << std::endl;
1392  return os;
1393  };
1394 };
1395 
1396 
1397 
1402 public:
1404  uint64_t tunnel_id) :
1405  coxmatch(rofl::openflow::OXM_TLV_BASIC_TUNNEL_ID, tunnel_id) {};
1407  uint64_t tunnel_id, uint64_t mask) :
1408  coxmatch(rofl::openflow::OXM_TLV_BASIC_TUNNEL_ID_MASK, tunnel_id, mask) {};
1410  coxmatch const& oxm) :
1411  coxmatch(oxm) {};
1412  virtual
1413  ~coxmatch_ofb_tunnel_id() {};
1414  friend std::ostream&
1415  operator<< (std::ostream& os, coxmatch_ofb_tunnel_id const& oxm) {
1416  os << dynamic_cast<coxmatch const&>(oxm);
1417  os << indent(2) << "<tunnel_id: "
1418  << std::hex
1419  << (unsigned long long)oxm.get_u64value() << "/" << (unsigned long long)oxm.get_u64mask()
1420  << std::dec
1421  << " >" << std::endl;
1422  return os;
1423  };
1424 };
1425 
1426 
1427 
1428 
1433 public:
1435  uint32_t pbb_isid) :
1436  coxmatch(rofl::openflow::OXM_TLV_BASIC_PBB_ISID, pbb_isid) {};
1438  uint32_t pbb_isid, uint32_t mask) :
1439  coxmatch(rofl::openflow::OXM_TLV_BASIC_PBB_ISID_MASK, pbb_isid, mask) {};
1441  coxmatch const& oxm) :
1442  coxmatch(oxm) {};
1443  virtual
1444  ~coxmatch_ofb_pbb_isid() {};
1445  friend std::ostream&
1446  operator<< (std::ostream& os, coxmatch_ofb_pbb_isid const& oxm) {
1447  os << dynamic_cast<coxmatch const&>(oxm);
1448  os << indent(2) << "<pbb_isid: "
1449  << std::hex
1450  << (unsigned int)oxm.get_u32value() << "/" << (unsigned int)oxm.get_u32mask()
1451  << std::dec
1452  << " >" << std::endl;
1453  return os;
1454  };
1455 };
1456 
1457 
1462 public:
1464  uint16_t ipv6_exthdr) :
1465  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_EXTHDR, ipv6_exthdr) {};
1467  uint16_t ipv6_exthdr, uint16_t mask) :
1468  coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_EXTHDR_MASK, ipv6_exthdr, mask) {};
1470  coxmatch const& oxm) :
1471  coxmatch(oxm) {};
1472  virtual
1474  friend std::ostream&
1475  operator<< (std::ostream& os, coxmatch_ofb_ipv6_exthdr const& oxm) {
1476  os << dynamic_cast<coxmatch const&>(oxm);
1477  os << indent(2) << "<ipv6-exthdr: "
1478  << (int)oxm.get_u16value() << "/" << oxm.get_u16mask()
1479  << " >" << std::endl;
1480  return os;
1481  };
1482 };
1483 
1484 
1489 public:
1491  uint8_t proto) :
1492  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_PROTO, proto) {};
1494  coxmatch const& oxm) :
1495  coxmatch(oxm) {};
1496  virtual
1497  ~coxmatch_ofx_nw_proto() {};
1498  friend std::ostream&
1499  operator<< (std::ostream& os, coxmatch_ofx_nw_proto const& oxm) {
1500  os << dynamic_cast<coxmatch const&>(oxm);
1501  os << indent(2) << "<nw-proto: " << (int)oxm.get_u8value() << " >" << std::endl;
1502  return os;
1503  };
1504 };
1505 
1506 
1511 public:
1513  uint8_t tos) :
1514  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_TOS, tos) {};
1516  coxmatch const& oxm) : coxmatch(oxm) {};
1517  virtual
1518  ~coxmatch_ofx_nw_tos() {};
1519  friend std::ostream&
1520  operator<< (std::ostream& os, coxmatch_ofx_nw_tos const& oxm) {
1521  os << dynamic_cast<coxmatch const&>(oxm);
1522  os << indent(2) << "<nw-tos: " << (int)oxm.get_u8value() << " >" << std::endl;
1523  return os;
1524  };
1525 };
1526 
1527 
1532 public:
1534  uint32_t src) :
1535  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC, src) {};
1537  uint32_t src, uint32_t mask) :
1538  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK, src, mask) {};
1540  rofl::caddress_in4 const& src) :
1541  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC, src) {};
1543  rofl::caddress_in4 const& src, rofl::caddress_in4 const& mask) :
1544  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK, src, mask) {};
1546  coxmatch const& oxm) :
1547  coxmatch(oxm) {};
1548  virtual
1549  ~coxmatch_ofx_nw_src() {};
1550  friend std::ostream&
1551  operator<< (std::ostream& os, coxmatch_ofx_nw_src const& oxm) {
1552  os << dynamic_cast<coxmatch const&>(oxm);
1553  os << indent(2) << "<nw-src value: >" << std::endl;
1554  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
1555  os << indent(2) << "<nw-src mask: >" << std::endl;
1556  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
1557  return os;
1558  };
1559 };
1560 
1561 
1566 public:
1568  uint32_t dst) :
1569  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST, dst) {};
1571  uint32_t dst, uint32_t mask) :
1572  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK, dst, mask) {};
1574  rofl::caddress_in4 const& dst) :
1575  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST, dst) {};
1577  rofl::caddress_in4 const& dst, rofl::caddress_in4 const& mask) :
1578  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK, dst, mask) {};
1580  coxmatch const& oxm) :
1581  coxmatch(oxm) {};
1582  virtual
1583  ~coxmatch_ofx_nw_dst() {};
1584  friend std::ostream&
1585  operator<< (std::ostream& os, coxmatch_ofx_nw_dst const& oxm) {
1586  os << dynamic_cast<coxmatch const&>(oxm);
1587  os << indent(2) << "<nw-dst value: >" << std::endl;
1588  { rofl::indent i(4); os << oxm.get_u32value_as_addr(); }
1589  os << indent(2) << "<nw-dst mask: >" << std::endl;
1590  { rofl::indent i(4); os << oxm.get_u32mask_as_addr(); }
1591 
1592  return os;
1593  };
1594 };
1595 
1596 
1601 public:
1603  uint16_t src) :
1604  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_TP_SRC, src) {};
1606  coxmatch const& oxm) :
1607  coxmatch(oxm) {};
1608  virtual
1609  ~coxmatch_ofx_tp_src() {};
1610  friend std::ostream&
1611  operator<< (std::ostream& os, coxmatch_ofx_tp_src const& oxm) {
1612  os << dynamic_cast<coxmatch const&>(oxm);
1613  os << indent(2) << "<tp-src: "
1614  << (int)oxm.get_u16value()
1615  << " >" << std::endl;
1616  return os;
1617  };
1618 };
1619 
1620 
1625 public:
1627  uint16_t dst) :
1628  coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_TP_DST, dst) {};
1630  coxmatch const& oxm) :
1631  coxmatch(oxm) {};
1632  virtual
1633  ~coxmatch_ofx_tp_dst() {};
1634  friend std::ostream&
1635  operator<< (std::ostream& os, coxmatch_ofx_tp_dst const& oxm) {
1636  os << dynamic_cast<coxmatch const&>(oxm);
1637  os << indent(2) << "<tp-dst: "
1638  << (int)oxm.get_u16value()
1639  << " >" << std::endl;
1640  return os;
1641  };
1642 };
1643 
1644 
1645 }; // end of namespace openflow
1646 }; // end of namespace rofl
1647 
1648 
1649 
1650 
1651 #endif /* COXMATCH_H_ */
Definition: coxmatch.h:684
Definition: coxmatch.h:640
Definition: coxmatch.h:1200
Definition: coxmatch.h:36
Definition: caddress.h:152
Definition: coxmatch.h:40
Definition: coxmatch.h:41
Definition: coxmatch.h:548
Definition: coxmatch.h:1328
Definition: caddress.h:589
Definition: coxmatch.h:1048
Definition: coxmatch.h:43
Definition: coxmatch.h:1024
Definition: coxmatch.h:526
Definition: coxmatch.h:442
Definition: coxmatch.h:1510
Definition: coxmatch.h:662
Definition: coxmatch.h:618
Definition: coxmatch.h:37
Definition: coxmatch.h:880
Definition: coxmatch.h:1303
Definition: coxmatch.h:359
Definition: coxmatch.h:42
Definition: coxmatch.h:803
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coxmatch.cc:679
Definition: thread_helper.h:25
Definition: coxmatch.h:1461
Definition: coxmatch.h:976
Definition: coxmatch.h:499
Definition: coxmatch.h:740
Definition: coxmatch.h:49
Definition: coxmatch.h:1565
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coxmatch.cc:668
Definition: coxmatch.h:1253
Definition: coxmatch.h:1000
Definition: coxmatch.h:1142
Definition: coxmatch.h:1171
Definition: coxmatch.h:928
coxmatch_ofb_ipv6_flabel(uint32_t flow_label)
Definition: coxmatch.h:1204
Definition: caddress.h:415
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
Definition: coxmatch.h:904
Definition: coxmatch.h:1278
Definition: coxmatch.h:1624
Definition: coxmatch.h:35
Definition: coxmatch.h:38
Definition: coxmatch.h:471
Definition: coxmatch.h:1401
Definition: coxmatch.h:952
Definition: coxmatch.h:1432
Definition: coxmatch.h:1376
Definition: coxmatch.h:1600
Definition: logging.h:76
Definition: coxmatch.h:774
Definition: coxmatch.h:39
Definition: coxmatch.h:1352
Definition: coxmatch.h:1531
Definition: coxmatch.h:1229
Definition: coxmatch.h:1488
Definition: coxmatch.h:706
Definition: coxmatch.h:398
Definition: croflexception.h:27
void clear()
Clears the allocated memory area by setting all bytes to 0.
Definition: cmemory.cc:281
Definition: coxmatch.h:1108
Definition: coxmatch.h:856
Definition: coxmatch.h:1073