20 #include "../endian_conversion.h"
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"
71 uint8_t* oxm_hdr,
size_t oxm_len);
77 uint32_t oxm_id, uint8_t value);
83 uint32_t oxm_id, uint8_t value, uint8_t mask);
89 uint32_t oxm_id, uint16_t value);
95 uint32_t oxm_id, uint16_t value, uint16_t mask);
101 uint32_t oxm_id, uint32_t value);
107 uint32_t oxm_id, uint32_t value, uint32_t mask);
113 uint32_t oxm_id, uint64_t value);
119 uint32_t oxm_id, uint64_t value, uint64_t mask);
216 uint8_t* buf,
size_t buflen);
223 uint8_t* buf,
size_t buflen);
250 get_oxm_class()
const;
263 get_oxm_field()
const;
276 get_oxm_hasmask()
const;
293 uint8_t get_u8value()
const;
294 uint8_t get_u8mask()
const;
295 uint8_t get_u8masked_value()
const;
297 uint16_t get_u16value()
const;
298 uint16_t get_u16mask()
const;
299 uint16_t get_u16masked_value()
const;
301 uint32_t get_u32value()
const;
302 uint32_t get_u32mask()
const;
303 uint32_t get_u32masked_value()
const;
313 uint64_t get_u64value()
const;
314 uint64_t get_u64mask()
const;
315 uint64_t get_u64masked_value()
const;
321 void set_u8value(uint8_t value);
322 void set_u8mask(uint8_t mask);
324 void set_u16value(uint16_t value);
325 void set_u16mask(uint16_t mask);
327 void set_u32value(uint32_t value);
328 void set_u32mask(uint32_t mask);
336 void set_u64value(uint64_t value);
337 void set_u64mask(uint64_t mask);
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;
352 os << dynamic_cast<rofl::cmemory const&>( oxm );
370 oxm_class(oxm_class), oxm_field(oxm_field) {};
376 uint16_t __oxm_class,
377 uint8_t __oxm_field)
const
379 return ((oxm_class == __oxm_class) && (oxm_field == __oxm_field));
389 return ((oxm_class == match.get_oxm_class()) &&
390 (oxm_field == match.get_oxm_field()));
402 coxmatch(rofl::openflow::OXM_TLV_BASIC_IN_PORT, port_no) {};
410 os << dynamic_cast<coxmatch const&>(oxm);
411 os <<
indent(2) <<
"<in-port: " << std::hex << (int)oxm.get_u32value() << std::dec <<
" >" << std::endl;
424 coxmatch(rofl::openflow::OXM_TLV_BASIC_IN_PHY_PORT, port_no) {};
432 os << dynamic_cast<coxmatch const&>(oxm);
433 os <<
indent(2) <<
"<in-phy-port: " << std::hex << (int)oxm.get_u32value() << std::dec <<
" >" << std::endl;
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) {};
457 os << dynamic_cast<coxmatch const&>(oxm);
459 os <<
indent(2) <<
"<metadata: "
460 << (
unsigned long long)oxm.get_u64value() <<
"/" << (
unsigned long long)oxm.get_u64mask()
462 <<
" >" << std::endl;
475 coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_DST, maddr) {};
478 coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_DST_MASK, maddr, mask) {};
486 os << dynamic_cast<coxmatch const&>(oxm);
487 os <<
indent(2) <<
"<eth-dst value: >" << std::endl;
489 os <<
indent(2) <<
"<eth-dst mask: >" << std::endl;
503 coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_SRC, maddr) {};
506 coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_SRC_MASK, maddr, mask) {};
513 os << dynamic_cast<coxmatch const&>(oxm);
514 os <<
indent(2) <<
"<eth-src value: >" << std::endl;
516 os <<
indent(2) <<
"<eth-src mask: >" << std::endl;
530 coxmatch(rofl::openflow::OXM_TLV_BASIC_ETH_TYPE, dl_type) {};
538 os << dynamic_cast<coxmatch const&>(oxm);
539 os <<
indent(2) <<
"<eth-type: 0x" << std::hex << (int)oxm.get_u16value() << std::dec <<
" >" << std::endl;
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) {};
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;
576 coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID,
577 (uint16_t)rofl::openflow::OFPVID_NONE) {};
585 os << dynamic_cast<coxmatch_ofb_vlan_vid const&>(oxm);
586 os <<
rofl::indent(2) <<
"<vlan-untagged >" << std::endl;
598 coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_VID_MASK,
599 (uint16_t)rofl::openflow::OFPVID_PRESENT,
600 (uint16_t)rofl::openflow::OFPVID_PRESENT) {};
608 os << dynamic_cast<coxmatch_ofb_vlan_vid const&>(oxm);
609 os <<
rofl::indent(2) <<
"<vlan-present >" << std::endl;
622 coxmatch(rofl::openflow::OXM_TLV_BASIC_VLAN_PCP, pcp) {};
630 os << dynamic_cast<coxmatch const&>(oxm);
631 os <<
indent(2) <<
"<vlan-pcp: " << (int)oxm.get_u8value() <<
" >" << std::endl;
644 coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_DSCP, dscp) {};
652 os << dynamic_cast<coxmatch const&>(oxm);
653 os <<
indent(2) <<
"<ip-dscp: " << (int)oxm.get_u8value() <<
" >" << std::endl;
666 coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_ECN, ecn) {};
674 os << dynamic_cast<coxmatch const&>(oxm);
675 os <<
indent(2) <<
"<ip-ecn: " << (int)oxm.get_u8value() <<
" >" << std::endl;
688 coxmatch(rofl::openflow::OXM_TLV_BASIC_IP_PROTO, proto) {};
696 os << dynamic_cast<coxmatch const&>(oxm);
697 os <<
indent(2) <<
"<ip-proto: " << (int)oxm.get_u8value() <<
" >" << std::endl;
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) {};
716 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC, src) {};
719 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_SRC_MASK, src, mask) {};
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;
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) {};
750 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST, dst) {};
753 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV4_DST_MASK, dst, mask) {};
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;
778 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_SRC, src) {};
781 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_SRC_MASK, src, mask) {};
789 os << dynamic_cast<coxmatch const&>(oxm);
791 os <<
rofl::indent(0) <<
"<ipv6-src value: > " << std::endl;
793 os <<
rofl::indent(0) <<
"<ipv6-src mask: > " << std::endl;
807 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_DST, dst) {};
810 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_DST_MASK, dst, mask) {};
818 os << dynamic_cast<coxmatch const&>(oxm);
820 os <<
rofl::indent(0) <<
"<ipv6-dst value: >" << std::endl;
822 os <<
rofl::indent(0) <<
"<ipv6-dst mask: > " << std::endl;
836 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TARGET, nd_target) {};
844 os << dynamic_cast<coxmatch const&>(oxm);
846 os <<
rofl::indent(0) <<
"<ipv6-nd-target value: > " << std::endl;
860 coxmatch(rofl::openflow::OXM_TLV_BASIC_TCP_SRC, src) {};
868 os << dynamic_cast<coxmatch const&>(oxm);
869 os <<
indent(2) <<
"<tcp-src: "
870 << (int)oxm.get_u16value()
871 <<
" >" << std::endl;
884 coxmatch(rofl::openflow::OXM_TLV_BASIC_TCP_DST, dst) {};
892 os << dynamic_cast<coxmatch const&>(oxm);
893 os <<
indent(2) <<
"<tcp-dst: "
894 << (int)oxm.get_u16value()
895 <<
" >" << std::endl;
908 coxmatch(rofl::openflow::OXM_TLV_BASIC_UDP_SRC, src) {};
916 os << dynamic_cast<coxmatch const&>(oxm);
917 os <<
indent(2) <<
"<udp-src: "
918 << (int)oxm.get_u16value()
919 <<
" >" << std::endl;
932 coxmatch(rofl::openflow::OXM_TLV_BASIC_UDP_DST, dst) {};
940 os << dynamic_cast<coxmatch const&>(oxm);
941 os <<
indent(2) <<
"<udp-dst: "
942 << (int)oxm.get_u16value()
943 <<
" >" << std::endl;
956 coxmatch(rofl::openflow::OXM_TLV_BASIC_SCTP_SRC, src) {};
964 os << dynamic_cast<coxmatch const&>(oxm);
965 os <<
indent(2) <<
"<sctp-src: "
966 << (int)oxm.get_u16value()
967 <<
" >" << std::endl;
980 coxmatch(rofl::openflow::OXM_TLV_BASIC_SCTP_DST, dst) {};
988 os << dynamic_cast<coxmatch const&>(oxm);
989 os <<
indent(2) <<
"<sctp-dst: "
990 << (int)oxm.get_u16value()
991 <<
" >" << std::endl;
1004 coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV4_TYPE, type) {};
1010 friend std::ostream&
1012 os << dynamic_cast<coxmatch const&>(oxm);
1013 os <<
indent(2) <<
"<icmpv4-type: "
1014 << (int)oxm.get_u8value()
1015 <<
" >" << std::endl;
1028 coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV4_CODE, code) {};
1034 friend std::ostream&
1036 os << dynamic_cast<coxmatch const&>(oxm);
1037 os <<
indent(2) <<
"<icmpv4-code: "
1038 << (int)oxm.get_u8value()
1039 <<
" >" << std::endl;
1052 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_OP, opcode) {};
1058 friend std::ostream&
1060 os << dynamic_cast<coxmatch const&>(oxm);
1061 os <<
indent(2) <<
"<arp-opcode: "
1062 << (int)oxm.get_u16value()
1063 <<
" >" << std::endl;
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) {};
1083 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA, spa) {};
1086 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SPA_MASK, spa, mask) {};
1092 friend std::ostream&
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(); }
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) {};
1118 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA, tpa) {};
1121 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_TPA_MASK, tpa, mask) {};
1127 friend std::ostream&
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(); }
1146 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SHA, maddr) {};
1149 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_SHA_MASK, maddr, mask) {};
1155 friend std::ostream&
1157 os << dynamic_cast<coxmatch const&>(oxm);
1158 os <<
indent(2) <<
"<arp-sha value: >" << std::endl;
1160 os <<
indent(2) <<
"<arp-sha mask: >" << std::endl;
1175 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_THA, maddr) {};
1178 coxmatch(rofl::openflow::OXM_TLV_BASIC_ARP_THA_MASK, maddr, mask) {};
1184 friend std::ostream&
1186 os << dynamic_cast<coxmatch const&>(oxm);
1187 os <<
indent(2) <<
"<arp-tha value: >" << std::endl;
1189 os <<
indent(2) <<
"<arp-tha mask: >" << std::endl;
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) :
1215 friend std::ostream&
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;
1233 coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV6_TYPE, type) {};
1239 friend std::ostream&
1241 os << dynamic_cast<coxmatch const&>(oxm);
1242 os <<
indent(2) <<
"<icmpv6-type: "
1243 << (int)oxm.get_u8value()
1244 <<
" >" << std::endl;
1257 coxmatch(rofl::openflow::OXM_TLV_BASIC_ICMPV6_CODE, code) {};
1263 friend std::ostream&
1265 os << dynamic_cast<coxmatch const&>(oxm);
1266 os <<
indent(2) <<
"<icmpv6-code: "
1267 << (int)oxm.get_u8value()
1268 <<
" >" << std::endl;
1282 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_SLL, addr) {};
1288 friend std::ostream&
1290 os << dynamic_cast<coxmatch const&>(oxm);
1291 os <<
indent(2) <<
"<ipv6-nd-sll value: >" << std::endl;
1293 os <<
indent(2) <<
"<ipv6-nd-sll mask: >" << std::endl;
1307 coxmatch(rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TLL, addr) {};
1313 friend std::ostream&
1315 os << dynamic_cast<coxmatch const&>(oxm);
1316 os <<
indent(2) <<
"<ipv6-nd-tll value: >" << std::endl;
1318 os <<
indent(2) <<
"<ipv6-nd-tll mask: >" << std::endl;
1331 uint32_t mpls_label) :
1332 coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_LABEL, mpls_label) {};
1338 friend std::ostream&
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;
1356 coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_TC, mpls_tc) {};
1362 friend std::ostream&
1364 os << dynamic_cast<coxmatch const&>(oxm);
1365 os <<
indent(2) <<
"<mpls-tc: "
1366 << (int)oxm.get_u8value()
1367 <<
" >" << std::endl;
1380 coxmatch(rofl::openflow::OXM_TLV_BASIC_MPLS_BOS, mpls_bos) {};
1386 friend std::ostream&
1388 os << dynamic_cast<coxmatch const&>(oxm);
1389 os <<
indent(2) <<
"<mpls-bos: "
1390 << (int)oxm.get_u8value()
1391 <<
" >" << std::endl;
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) {};
1414 friend std::ostream&
1416 os << dynamic_cast<coxmatch const&>(oxm);
1417 os <<
indent(2) <<
"<tunnel_id: "
1419 << (
unsigned long long)oxm.get_u64value() <<
"/" << (
unsigned long long)oxm.get_u64mask()
1421 <<
" >" << std::endl;
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) {};
1445 friend std::ostream&
1447 os << dynamic_cast<coxmatch const&>(oxm);
1448 os <<
indent(2) <<
"<pbb_isid: "
1450 << (
unsigned int)oxm.get_u32value() <<
"/" << (
unsigned int)oxm.get_u32mask()
1452 <<
" >" << std::endl;
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) {};
1474 friend std::ostream&
1476 os << dynamic_cast<coxmatch const&>(oxm);
1477 os <<
indent(2) <<
"<ipv6-exthdr: "
1478 << (int)oxm.get_u16value() <<
"/" << oxm.get_u16mask()
1479 <<
" >" << std::endl;
1492 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_PROTO, proto) {};
1498 friend std::ostream&
1500 os << dynamic_cast<coxmatch const&>(oxm);
1501 os <<
indent(2) <<
"<nw-proto: " << (int)oxm.get_u8value() <<
" >" << std::endl;
1514 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_TOS, tos) {};
1519 friend std::ostream&
1521 os << dynamic_cast<coxmatch const&>(oxm);
1522 os <<
indent(2) <<
"<nw-tos: " << (int)oxm.get_u8value() <<
" >" << std::endl;
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) {};
1541 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC, src) {};
1544 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK, src, mask) {};
1550 friend std::ostream&
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(); }
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) {};
1575 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST, dst) {};
1578 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK, dst, mask) {};
1584 friend std::ostream&
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(); }
1604 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_TP_SRC, src) {};
1610 friend std::ostream&
1612 os << dynamic_cast<coxmatch const&>(oxm);
1613 os <<
indent(2) <<
"<tp-src: "
1614 << (int)oxm.get_u16value()
1615 <<
" >" << std::endl;
1628 coxmatch(rofl::openflow::experimental::OXM_TLV_EXPR_TP_DST, dst) {};
1634 friend std::ostream&
1636 os << dynamic_cast<coxmatch const&>(oxm);
1637 os <<
indent(2) <<
"<tp-dst: "
1638 << (int)oxm.get_u16value()
1639 <<
" >" << std::endl;
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: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: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:573
Definition: coxmatch.h:420
Definition: coxmatch.h:595
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:832
Definition: coxmatch.h:1401
Definition: coxmatch.h:952
Definition: coxmatch.h:1432
Definition: coxmatch.h:1376
Definition: coxmatch.h:1600
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