14 #include "../endian_conversion.h"
17 #include "rofl/common/openflow/openflow.h"
18 #include "rofl/common/cmemory.h"
19 #include "rofl/common/caddress.h"
20 #include "rofl/common/croflexception.h"
21 #include "rofl/common/caddress.h"
22 #include "rofl/common/openflow/openflow_rofl_exceptions.h"
23 #include "rofl/common/openflow/coxmatches.h"
47 uint8_t of_version = rofl::openflow::OFP_VERSION_UNKNOWN,
48 uint16_t type = rofl::openflow::OFPMT_OXM);
73 operator== (
const cofmatch& m)
const;
90 uint8_t* buf,
size_t buflen);
97 uint8_t* buf,
size_t buflen);
105 check_prerequisites()
const;
111 clear() { matches.clear(); };
119 bool strict =
false) {
120 return matches.contains(match.get_matches(), strict);
129 uint16_t& exact_hits,
130 uint16_t& wildcard_hits,
132 return matches.is_part_of(match.get_matches(), exact_hits, wildcard_hits, missed);
141 set_version(uint8_t ofp_version) { this->of_version = ofp_version; };
147 get_version()
const {
return of_version; };
153 set_type(uint16_t type) { this->type = type; };
159 get_type()
const {
return type; };
165 set_matches() {
return matches; };
171 get_matches()
const {
return matches; };
180 uint8_t* buf,
size_t buflen);
187 uint8_t* buf,
size_t buflen);
195 uint8_t* buf,
size_t buflen);
210 operator<< (std::ostream& os,
cofmatch const& m) {
211 os <<
rofl::indent(0) <<
"<cofmatch ofp-version:" << (int)m.get_version() <<
" >" << std::endl;
212 switch (m.of_version) {
213 case rofl::openflow12::OFP_VERSION:
214 case rofl::openflow13::OFP_VERSION: {
215 os <<
rofl::indent(2) <<
"<type: " << m.type <<
" >" << std::endl;
231 uint8_t get_nw_proto()
const {
232 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_PROTO).get_u8value();
234 uint8_t get_nw_tos()
const {
235 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_TOS).get_u8value();
238 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK).get_u32masked_value_as_addr();
241 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK).get_u32value_as_addr();
244 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK).get_u32mask_as_addr();
247 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK).get_u32masked_value_as_addr();
250 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK).get_u32value_as_addr();
253 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK).get_u32mask_as_addr();
255 uint16_t get_tp_src()
const {
256 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_TP_SRC).get_u16value();
258 uint16_t get_tp_dst()
const {
259 return matches.get_match(rofl::openflow::experimental::OXM_TLV_EXPR_TP_DST).get_u16value();
263 uint32_t get_in_port()
const {
264 return matches.get_match(OXM_TLV_BASIC_IN_PORT).get_u32value();
266 uint32_t get_in_phy_port()
const {
267 return matches.get_match(OXM_TLV_BASIC_IN_PHY_PORT).get_u32value();
269 uint64_t get_metadata()
const {
270 return matches.get_match(OXM_TLV_BASIC_METADATA).get_u64masked_value();
272 uint64_t get_metadata_value()
const {
273 return matches.get_match(OXM_TLV_BASIC_METADATA).get_u64value();
275 uint64_t get_metadata_mask()
const {
276 return matches.get_match(OXM_TLV_BASIC_METADATA).get_u64mask();
279 return matches.get_match(OXM_TLV_BASIC_ETH_DST).get_u48masked_value();
282 return matches.get_match(OXM_TLV_BASIC_ETH_DST).get_u48value();
285 return matches.get_match(OXM_TLV_BASIC_ETH_DST).get_u48mask();
288 return matches.get_match(OXM_TLV_BASIC_ETH_SRC).get_u48masked_value();
291 return matches.get_match(OXM_TLV_BASIC_ETH_SRC).get_u48value();
294 return matches.get_match(OXM_TLV_BASIC_ETH_SRC).get_u48mask();
296 uint16_t get_eth_type()
const {
297 return matches.get_match(OXM_TLV_BASIC_ETH_TYPE).get_u16value();
299 uint16_t get_vlan_vid()
const {
300 return matches.get_match(OXM_TLV_BASIC_VLAN_VID).get_u16masked_value();
302 uint16_t get_vlan_vid_value()
const {
303 return matches.get_match(OXM_TLV_BASIC_VLAN_VID).get_u16value();
305 uint16_t get_vlan_vid_mask()
const {
306 return matches.get_match(OXM_TLV_BASIC_VLAN_VID).get_u16mask();
308 uint8_t get_vlan_pcp()
const {
309 return matches.get_match(OXM_TLV_BASIC_VLAN_PCP).get_u8value();
311 uint32_t get_mpls_label()
const {
312 return matches.get_match(OXM_TLV_BASIC_MPLS_LABEL).get_u32value();
314 uint8_t get_mpls_tc()
const {
315 return matches.get_match(OXM_TLV_BASIC_MPLS_TC).get_u8value();
318 return matches.get_match(OXM_TLV_BASIC_IPV4_SRC).get_u32masked_value_as_addr();
321 return matches.get_match(OXM_TLV_BASIC_IPV4_SRC).get_u32value_as_addr();
324 return matches.get_match(OXM_TLV_BASIC_IPV4_SRC).get_u32mask_as_addr();
327 return matches.get_match(OXM_TLV_BASIC_IPV4_DST).get_u32masked_value_as_addr();
330 return matches.get_match(OXM_TLV_BASIC_IPV4_DST).get_u32value_as_addr();
333 return matches.get_match(OXM_TLV_BASIC_IPV4_DST).get_u32mask_as_addr();
335 uint16_t get_arp_opcode()
const {
336 return matches.get_match(OXM_TLV_BASIC_ARP_OP).get_u16value();
339 return matches.get_match(OXM_TLV_BASIC_ARP_SHA).get_u48masked_value();
342 return matches.get_match(OXM_TLV_BASIC_ARP_SHA).get_u48value();
345 return matches.get_match(OXM_TLV_BASIC_ARP_SHA).get_u48mask();
348 return matches.get_match(OXM_TLV_BASIC_ARP_THA).get_u48masked_value();
351 return matches.get_match(OXM_TLV_BASIC_ARP_THA).get_u48value();
354 return matches.get_match(OXM_TLV_BASIC_ARP_THA).get_u48mask();
357 return matches.get_match(OXM_TLV_BASIC_ARP_SPA).get_u32masked_value_as_addr();
360 return matches.get_match(OXM_TLV_BASIC_ARP_SPA).get_u32value_as_addr();
363 return matches.get_match(OXM_TLV_BASIC_ARP_SPA).get_u32mask_as_addr();
366 return matches.get_match(OXM_TLV_BASIC_ARP_TPA).get_u32masked_value_as_addr();
369 return matches.get_match(OXM_TLV_BASIC_ARP_TPA).get_u32value_as_addr();
372 return matches.get_match(OXM_TLV_BASIC_ARP_TPA).get_u32mask_as_addr();
375 return matches.get_match(OXM_TLV_BASIC_IPV6_SRC).get_u128masked_value();
378 return matches.get_match(OXM_TLV_BASIC_IPV6_SRC).get_u128value();
381 return matches.get_match(OXM_TLV_BASIC_IPV6_SRC).get_u128mask();
384 return matches.get_match(OXM_TLV_BASIC_IPV6_DST).get_u128masked_value();
387 return matches.get_match(OXM_TLV_BASIC_IPV6_DST).get_u128value();
390 return matches.get_match(OXM_TLV_BASIC_IPV6_DST).get_u128mask();
392 uint8_t get_ip_proto()
const {
393 return matches.get_match(OXM_TLV_BASIC_IP_PROTO).get_u8value();
395 uint8_t get_ip_dscp()
const {
396 return matches.get_match(OXM_TLV_BASIC_IP_DSCP).get_u8value();
398 uint8_t get_ip_ecn()
const {
399 return matches.get_match(OXM_TLV_BASIC_IP_ECN).get_u8value();
401 uint8_t get_icmpv4_type()
const {
402 return matches.get_match(OXM_TLV_BASIC_ICMPV4_TYPE).get_u8value();
404 uint8_t get_icmpv4_code()
const {
405 return matches.get_match(OXM_TLV_BASIC_ICMPV4_CODE).get_u8value();
407 uint8_t get_icmpv6_type()
const {
408 return matches.get_match(OXM_TLV_BASIC_ICMPV6_TYPE).get_u8value();
410 uint8_t get_icmpv6_code()
const {
411 return matches.get_match(OXM_TLV_BASIC_ICMPV6_CODE).get_u8value();
413 uint32_t get_ipv6_flabel()
const {
414 return matches.get_match(OXM_TLV_BASIC_IPV6_FLABEL).get_u32masked_value();
416 uint32_t get_ipv6_flabel_value()
const {
417 return matches.get_match(OXM_TLV_BASIC_IPV6_FLABEL).get_u32value();
419 uint32_t get_ipv6_flabel_mask()
const {
420 return matches.get_match(OXM_TLV_BASIC_IPV6_FLABEL).get_u32mask();
423 return matches.get_match(OXM_TLV_BASIC_IPV6_ND_SLL).get_u48masked_value();
426 return matches.get_match(OXM_TLV_BASIC_IPV6_ND_TLL).get_u48masked_value();
429 return matches.get_match(OXM_TLV_BASIC_IPV6_ND_TARGET).get_u128masked_value();
431 uint16_t get_udp_src()
const {
432 return matches.get_match(OXM_TLV_BASIC_UDP_SRC).get_u16value();
434 uint16_t get_udp_dst()
const {
435 return matches.get_match(OXM_TLV_BASIC_UDP_DST).get_u16value();
437 uint16_t get_tcp_src()
const {
438 return matches.get_match(OXM_TLV_BASIC_TCP_SRC).get_u16value();
440 uint16_t get_tcp_dst()
const {
441 return matches.get_match(OXM_TLV_BASIC_TCP_DST).get_u16value();
443 uint16_t get_sctp_src()
const {
444 return matches.get_match(OXM_TLV_BASIC_SCTP_SRC).get_u16value();
446 uint16_t get_sctp_dst()
const {
447 return matches.get_match(OXM_TLV_BASIC_SCTP_DST).get_u16value();
451 bool get_mpls_bos()
const {
452 return matches.get_match(OXM_TLV_BASIC_MPLS_BOS).get_u8value();
454 uint64_t get_tunnel_id()
const {
455 return matches.get_match(OXM_TLV_BASIC_TUNNEL_ID).get_u64masked_value();
457 uint64_t get_tunnel_id_value()
const {
458 return matches.get_match(OXM_TLV_BASIC_TUNNEL_ID).get_u64value();
460 uint64_t get_tunnel_id_mask()
const {
461 return matches.get_match(OXM_TLV_BASIC_TUNNEL_ID).get_u64mask();
463 uint32_t get_pbb_isid()
const {
464 return matches.get_match(OXM_TLV_BASIC_PBB_ISID).get_u32masked_value();
466 uint32_t get_pbb_isid_value()
const {
467 return matches.get_match(OXM_TLV_BASIC_PBB_ISID).get_u32value();
469 uint32_t get_pbb_isid_mask()
const {
470 return matches.get_match(OXM_TLV_BASIC_PBB_ISID).get_u32mask();
472 uint16_t get_ipv6_exthdr()
const {
473 return matches.get_match(OXM_TLV_BASIC_IPV6_EXTHDR).get_u16masked_value();
475 uint16_t get_ipv6_exthdr_value()
const {
476 return matches.get_match(OXM_TLV_BASIC_IPV6_EXTHDR).get_u16value();
478 uint16_t get_ipv6_exthdr_mask()
const {
479 return matches.get_match(OXM_TLV_BASIC_IPV6_EXTHDR).get_u16mask();
483 void set_nw_proto(uint8_t proto) {
486 void set_nw_tos(uint8_t tos) {
501 void set_tp_src(uint16_t src_port) {
504 void set_tp_dst(uint16_t dst_port) {
509 void set_in_port(uint32_t in_port) {
512 void set_in_phy_port(uint32_t in_phy_port) {
515 void set_metadata(uint64_t metadata) {
518 void set_metadata(uint64_t metadata, uint64_t mask) {
521 void set_eth_dst(
cmacaddr const& maddr) {
527 void set_eth_src(
cmacaddr const& maddr) {
533 void set_eth_type( uint16_t dl_type) {
536 void set_vlan_vid(uint16_t vid) {
539 void set_vlan_vid(uint16_t vid, uint16_t mask) {
542 void set_vlan_present() {
545 void set_vlan_untagged() {
548 void set_vlan_pcp(uint8_t pcp) {
551 void set_ip_dscp(uint8_t dscp) {
554 void set_ip_ecn(uint8_t ecn) {
557 void set_ip_proto(uint8_t proto) {
572 void set_tcp_src(uint16_t src_port) {
575 void set_tcp_dst(uint16_t dst_port) {
578 void set_udp_src(uint16_t src_port) {
581 void set_udp_dst(uint16_t dst_port) {
584 void set_sctp_src(uint16_t src_port) {
587 void set_sctp_dst(uint16_t dst_port) {
590 void set_icmpv4_type(uint8_t type) {
593 void set_icmpv4_code(uint8_t code) {
596 void set_arp_opcode(uint16_t opcode) {
611 void set_arp_sha(
cmacaddr const& sha) {
617 void set_arp_tha(
cmacaddr const& tha) {
635 void set_ipv6_flabel(uint32_t flabel) {
638 void set_ipv6_flabel(uint32_t flabel, uint32_t mask) {
641 void set_icmpv6_type(uint8_t type) {
644 void set_icmpv6_code(uint8_t code) {
650 void set_ipv6_nd_sll(
cmacaddr const& maddr) {
653 void set_ipv6_nd_tll(
cmacaddr const& maddr) {
656 void set_mpls_label(uint32_t label) {
659 void set_mpls_tc(uint8_t tc) {
664 void set_mpls_bos(
bool bos) {
667 void set_tunnel_id(uint64_t tunnel_id) {
670 void set_tunnel_id(uint64_t tunnel_id, uint64_t mask) {
673 void set_pbb_isid(uint32_t pbb_isid) {
676 void set_pbb_isid(uint32_t pbb_isid, uint32_t mask) {
679 void set_ipv6_exthdr(uint16_t ipv6_exthdr) {
682 void set_ipv6_exthdr(uint16_t ipv6_exthdr, uint16_t mask) {
693 bool has_nw_proto()
const {
694 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_PROTO);
696 bool has_nw_tos()
const {
697 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_TOS);
699 bool has_nw_src()
const {
700 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK);
702 bool has_nw_src_value()
const {
703 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK);
705 bool has_nw_src_mask()
const {
706 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_SRC_MASK);
708 bool has_nw_dst()
const {
709 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK);
711 bool has_nw_dst_value()
const {
712 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK);
714 bool has_nw_dst_mask()
const {
715 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_NW_DST_MASK);
717 bool has_tp_src()
const {
718 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_TP_SRC);
720 bool has_tp_dst()
const {
721 return matches.has_match(rofl::openflow::experimental::OXM_TLV_EXPR_TP_DST);
725 bool has_in_port()
const {
726 return matches.has_match(OXM_TLV_BASIC_IN_PORT);
728 bool has_in_phy_port()
const {
729 return matches.has_match(OXM_TLV_BASIC_IN_PHY_PORT);
731 bool has_metadata()
const {
732 return matches.has_match(OXM_TLV_BASIC_METADATA);
734 bool has_metadata_value()
const {
735 return matches.has_match(OXM_TLV_BASIC_METADATA);
737 bool has_metadata_mask()
const {
738 return matches.has_match(OXM_TLV_BASIC_METADATA);
740 bool has_eth_dst()
const {
741 return matches.has_match(OXM_TLV_BASIC_ETH_DST);
743 bool has_eth_dst_addr()
const {
744 return matches.has_match(OXM_TLV_BASIC_ETH_DST);
746 bool has_eth_dst_mask()
const {
747 return matches.has_match(OXM_TLV_BASIC_ETH_DST);
749 bool has_eth_src()
const {
750 return matches.has_match(OXM_TLV_BASIC_ETH_SRC);
752 bool has_eth_src_addr()
const {
753 return matches.has_match(OXM_TLV_BASIC_ETH_SRC);
755 bool has_eth_src_mask()
const {
756 return matches.has_match(OXM_TLV_BASIC_ETH_SRC);
758 bool has_eth_type()
const {
759 return matches.has_match(OXM_TLV_BASIC_ETH_TYPE);
761 bool has_vlan_vid()
const {
762 return matches.has_match(OXM_TLV_BASIC_VLAN_VID);
764 bool has_vlan_vid_value()
const {
765 return matches.has_match(OXM_TLV_BASIC_VLAN_VID);
767 bool has_vlan_vid_mask()
const {
768 return matches.has_match(OXM_TLV_BASIC_VLAN_VID);
770 bool has_vlan_pcp()
const {
771 return matches.has_match(OXM_TLV_BASIC_VLAN_PCP);
773 bool has_mpls_label()
const {
774 return matches.has_match(OXM_TLV_BASIC_MPLS_LABEL);
776 bool has_mpls_tc()
const {
777 return matches.has_match(OXM_TLV_BASIC_MPLS_TC);
779 bool has_ipv4_src()
const {
780 return matches.has_match(OXM_TLV_BASIC_IPV4_SRC);
782 bool has_ipv4_src_value()
const {
783 return matches.has_match(OXM_TLV_BASIC_IPV4_SRC);
785 bool has_ipv4_src_mask()
const {
786 return matches.has_match(OXM_TLV_BASIC_IPV4_SRC);
788 bool has_ipv4_dst()
const {
789 return matches.has_match(OXM_TLV_BASIC_IPV4_DST);
791 bool has_ipv4_dst_value()
const {
792 return matches.has_match(OXM_TLV_BASIC_IPV4_DST);
794 bool has_ipv4_dst_mask()
const {
795 return matches.has_match(OXM_TLV_BASIC_IPV4_DST);
797 bool has_arp_opcode()
const {
798 return matches.has_match(OXM_TLV_BASIC_ARP_OP);
800 bool has_arp_sha()
const {
801 return matches.has_match(OXM_TLV_BASIC_ARP_SHA);
803 bool has_arp_sha_addr()
const {
804 return matches.has_match(OXM_TLV_BASIC_ARP_SHA);
806 bool has_arp_sha_mask()
const {
807 return matches.has_match(OXM_TLV_BASIC_ARP_SHA);
809 bool has_arp_tha()
const {
810 return matches.has_match(OXM_TLV_BASIC_ARP_THA);
812 bool has_arp_tha_addr()
const {
813 return matches.has_match(OXM_TLV_BASIC_ARP_THA);
815 bool has_arp_tha_mask()
const {
816 return matches.has_match(OXM_TLV_BASIC_ARP_THA);
818 bool has_arp_spa()
const {
819 return matches.has_match(OXM_TLV_BASIC_ARP_SPA);
821 bool has_arp_spa_value()
const {
822 return matches.has_match(OXM_TLV_BASIC_ARP_SPA);
824 bool has_arp_spa_mask()
const {
825 return matches.has_match(OXM_TLV_BASIC_ARP_SPA);
827 bool has_arp_tpa()
const {
828 return matches.has_match(OXM_TLV_BASIC_ARP_TPA);
830 bool has_arp_tpa_value()
const {
831 return matches.has_match(OXM_TLV_BASIC_ARP_TPA);
833 bool has_arp_tpa_mask()
const {
834 return matches.has_match(OXM_TLV_BASIC_ARP_TPA);
836 bool has_ipv6_src()
const {
837 return matches.has_match(OXM_TLV_BASIC_IPV6_SRC);
839 bool has_ipv6_src_value()
const {
840 return matches.has_match(OXM_TLV_BASIC_IPV6_SRC);
842 bool has_ipv6_src_mask()
const {
843 return matches.has_match(OXM_TLV_BASIC_IPV6_SRC);
845 bool has_ipv6_dst()
const {
846 return matches.has_match(OXM_TLV_BASIC_IPV6_DST);
848 bool has_ipv6_dst_value()
const {
849 return matches.has_match(OXM_TLV_BASIC_IPV6_DST);
851 bool has_ipv6_dst_mask()
const {
852 return matches.has_match(OXM_TLV_BASIC_IPV6_DST);
854 bool has_ip_proto()
const {
855 return matches.has_match(OXM_TLV_BASIC_IP_PROTO);
857 bool has_ip_dscp()
const {
858 return matches.has_match(OXM_TLV_BASIC_IP_DSCP);
860 bool has_ip_ecn()
const {
861 return matches.has_match(OXM_TLV_BASIC_IP_ECN);
863 bool has_icmpv4_type()
const {
864 return matches.has_match(OXM_TLV_BASIC_ICMPV4_TYPE);
866 bool has_icmpv4_code()
const {
867 return matches.has_match(OXM_TLV_BASIC_ICMPV4_CODE);
869 bool has_icmpv6_type()
const {
870 return matches.has_match(OXM_TLV_BASIC_ICMPV6_TYPE);
872 bool has_icmpv6_code()
const {
873 return matches.has_match(OXM_TLV_BASIC_ICMPV6_CODE);
875 bool has_ipv6_flabel()
const {
876 return matches.has_match(OXM_TLV_BASIC_IPV6_FLABEL);
878 bool has_ipv6_flabel_value()
const {
879 return matches.has_match(OXM_TLV_BASIC_IPV6_FLABEL);
881 bool has_ipv6_flabel_mask()
const {
882 return matches.has_match(OXM_TLV_BASIC_IPV6_FLABEL);
884 bool has_ipv6_nd_sll()
const {
885 return matches.has_match(OXM_TLV_BASIC_IPV6_ND_SLL);
887 bool has_ipv6_nd_tll()
const {
888 return matches.has_match(OXM_TLV_BASIC_IPV6_ND_TLL);
890 bool has_ipv6_nd_target()
const {
891 return matches.has_match(OXM_TLV_BASIC_IPV6_ND_TARGET);
893 bool has_udp_src()
const {
894 return matches.has_match(OXM_TLV_BASIC_UDP_SRC);
896 bool has_udp_dst()
const {
897 return matches.has_match(OXM_TLV_BASIC_UDP_DST);
899 bool has_tcp_src()
const {
900 return matches.has_match(OXM_TLV_BASIC_TCP_SRC);
902 bool has_tcp_dst()
const {
903 return matches.has_match(OXM_TLV_BASIC_TCP_DST);
905 bool has_sctp_src()
const {
906 return matches.has_match(OXM_TLV_BASIC_SCTP_SRC);
908 bool has_sctp_dst()
const {
909 return matches.has_match(OXM_TLV_BASIC_SCTP_DST);
913 bool has_mpls_bos()
const {
914 return matches.has_match(OXM_TLV_BASIC_MPLS_BOS);
916 bool has_tunnel_id()
const {
917 return matches.has_match(OXM_TLV_BASIC_TUNNEL_ID);
919 bool has_tunnel_id_value()
const {
920 return matches.has_match(OXM_TLV_BASIC_TUNNEL_ID);
922 bool has_tunnel_id_mask()
const {
923 return matches.has_match(OXM_TLV_BASIC_TUNNEL_ID);
925 bool has_pbb_isid()
const {
926 return matches.has_match(OXM_TLV_BASIC_PBB_ISID);
928 bool has_pbb_isid_value()
const {
929 return matches.has_match(OXM_TLV_BASIC_PBB_ISID);
931 bool has_pbb_isid_mask()
const {
932 return matches.has_match(OXM_TLV_BASIC_PBB_ISID);
934 bool has_ipv6_exthdr()
const {
935 return matches.has_match(OXM_TLV_BASIC_IPV6_EXTHDR);
937 bool has_ipv6_exthdr_value()
const {
938 return matches.has_match(OXM_TLV_BASIC_IPV6_EXTHDR);
940 bool has_ipv6_exthdr_mask()
const {
941 return matches.has_match(OXM_TLV_BASIC_IPV6_EXTHDR);
Definition: coxmatch.h:684
Definition: coxmatch.h:640
Definition: coxmatch.h:1200
Definition: caddress.h:152
Definition: coxmatch.h:548
Definition: cofmatch.h:29
Definition: coxmatch.h:1328
Definition: caddress.h:589
Definition: coxmatch.h:1048
Definition: coxmatch.h:1024
Definition: cofmatch.h:30
Definition: coxmatch.h:526
Definition: coxmatch.h:1510
Definition: coxmatch.h:662
Definition: coxmatch.h:618
Definition: coxmatch.h:880
Definition: coxmatch.h:1303
Definition: coxmatch.h:803
Definition: coxmatch.h:1461
Definition: coxmatch.h:976
Definition: cofmatch.h:35
Definition: coxmatch.h:573
Definition: coxmatch.h:420
Definition: coxmatch.h:595
Definition: coxmatch.h:499
Definition: coxmatch.h:740
Definition: coxmatch.h:1565
Definition: coxmatch.h:1253
Definition: cofmatch.h:31
Definition: coxmatch.h:1000
Definition: coxmatch.h:1142
Definition: coxmatch.h:1171
Definition: coxmatch.h:928
Definition: caddress.h:415
Definition: cofmatch.h:32
Definition: coxmatch.h:904
Definition: coxmatch.h:1278
Definition: coxmatch.h:1624
Definition: coxmatch.h:471
Definition: coxmatches.h:47
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: cofmatch.h:28
Definition: coxmatch.h:774
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
Definition: coxmatch.h:1108
Definition: coxmatch.h:856
Definition: coxmatch.h:1073