8 #ifndef COFTABLEFEATUREPROP_H_
9 #define COFTABLEFEATUREPROP_H_
16 #include "rofl/common/cmemory.h"
17 #include "rofl/common/croflexception.h"
18 #include "rofl/common/openflow/openflow.h"
19 #include "rofl/common/openflow/cofaction.h"
20 #include "rofl/common/openflow/cofinstruction.h"
34 uint8_t *ofhu_ofp_tfp;
38 #define ofp_tfp ofh_ofhu.ofhu_ofp_tfp
39 #define ofp_tfphdr ofh_ofhu.ofhu_ofp_tfphdr
89 uint8_t* buf,
size_t buflen);
96 uint8_t* buf,
size_t buflen);
114 set_type(uint16_t type);
126 set_length(uint16_t len);
140 os <<
indent(0) <<
"<coftable_feature_prop type:" << tfp.get_type() <<
" len:" << tfp.get_length() <<
" >" << std::endl;
142 os << dynamic_cast<rofl::cmemory const&>( tfp );
152 std::vector<struct rofl::openflow::ofp_instruction> instructions_ids;
155 uint8_t *ofhu_ofp_tfpi;
159 #define ofh_tfpi ofh_ofhu.ofhu_ofp_tfpi
160 #define ofh_tfpihdr ofh_ofhu.ofhu_ofp_tfpihdr
168 uint8_t ofp_version = OFP_VERSION_UNKNOWN,
209 uint8_t* buf,
size_t buflen);
216 uint8_t* buf,
size_t buflen);
221 std::vector<struct rofl::openflow::ofp_instruction>&
222 set_instruction_ids() {
return instructions_ids; };
227 const std::vector<struct rofl::openflow::ofp_instruction>&
228 get_instruction_ids()
const {
return instructions_ids; };
251 os << dynamic_cast<coftable_feature_prop const&>( tfp );
252 os <<
indent(2) <<
"<coftable_feature_prop_instructions size:" << tfp.instructions_ids.size() <<
" ";
253 switch (tfp.get_type()) {
254 case rofl::openflow13::OFPTFPT_INSTRUCTIONS: {
255 os <<
"INSTRUCTIONS";
257 case rofl::openflow13::OFPTFPT_INSTRUCTIONS_MISS: {
258 os <<
"INSTRUCTIONS-MISS";
261 os <<
"type:" << (int)tfp.get_type();
264 os <<
" >" << std::endl;
266 for (std::vector<struct rofl::openflow::ofp_instruction>::const_iterator
267 it = tfp.instructions_ids.begin(); it != tfp.instructions_ids.end(); ++it) {
268 switch ((*it).type) {
269 case rofl::openflow::OFPIT_GOTO_TABLE: {
270 os <<
indent(4) <<
"<instruction-id GOTO-TABLE >" << std::endl;
272 case rofl::openflow::OFPIT_WRITE_METADATA: {
273 os <<
indent(4) <<
"<instruction-id WRITE-METADATA >" << std::endl;
275 case rofl::openflow::OFPIT_WRITE_ACTIONS: {
276 os <<
indent(4) <<
"<instruction-id WRITE-ACTIONS >" << std::endl;
278 case rofl::openflow::OFPIT_APPLY_ACTIONS: {
279 os <<
indent(4) <<
"<instruction-id APPLY-ACTIONS >" << std::endl;
281 case rofl::openflow::OFPIT_CLEAR_ACTIONS: {
282 os <<
indent(4) <<
"<instruction-id CLEAR-ACTIONS >" << std::endl;
284 case rofl::openflow::OFPIT_METER: {
285 os <<
indent(4) <<
"<instruction-id METER >" << std::endl;
287 case rofl::openflow::OFPIT_EXPERIMENTER: {
288 os <<
indent(4) <<
"<instruction-id EXPERIMENTER >" << std::endl;
291 os <<
indent(4) <<
"<instruction-id type:" << (*it).type <<
" len:" << (*it).len <<
" >" << std::endl;
303 public std::vector<uint8_t>
306 uint8_t *ofhu_ofp_tfpnxt;
310 #define ofh_tfpnxt ofh_ofhu.ofhu_ofp_tfpnxt
311 #define ofh_tfpnxthdr ofh_ofhu.ofhu_ofp_tfpnxthdr
319 uint8_t ofp_version = OFP_VERSION_UNKNOWN,
360 uint8_t* buf,
size_t buflen);
367 uint8_t* buf,
size_t buflen);
372 std::vector<uint8_t>&
373 get_next_table_ids() {
return *
this; };
394 os << dynamic_cast<coftable_feature_prop const&>( tfp );
395 os <<
indent(2) <<
"<coftable_feature_prop_next_tables size:" << tfp.size() <<
" ";
396 switch (tfp.get_type()) {
397 case rofl::openflow13::OFPTFPT_NEXT_TABLES: {
400 case rofl::openflow13::OFPTFPT_NEXT_TABLES_MISS: {
401 os <<
"NEXT-TABLES-MISS";
404 os <<
"type:" << (int)tfp.get_type();
407 os <<
" >" << std::endl;
409 for (std::vector<uint8_t>::const_iterator it = tfp.begin(); it != tfp.end(); ++it) {
410 os <<
indent(4) <<
"<table-id:" << (int)(*it) <<
" >" << std::endl;
422 uint8_t *ofhu_ofp_tfpa;
426 #define ofh_tfpa ofh_ofhu.ofhu_ofp_tfpa
427 #define ofh_tfpahdr ofh_ofhu.ofhu_ofp_tfpahdr
429 std::vector<struct rofl::openflow::ofp_action> actions;
437 uint8_t ofp_version = OFP_VERSION_UNKNOWN,
478 uint8_t* buf,
size_t buflen);
485 uint8_t* buf,
size_t buflen);
491 std::vector<struct rofl::openflow::ofp_action>&
492 set_action_ids() {
return actions; };
497 const std::vector<struct rofl::openflow::ofp_action>&
498 get_action_ids()
const {
return actions; };
521 os << dynamic_cast<coftable_feature_prop const&>( tfp );
522 os <<
indent(2) <<
"<coftable_feature_prop_actions size:" << tfp.actions.size() <<
" ";
523 switch (tfp.get_type()) {
524 case rofl::openflow13::OFPTFPT_WRITE_ACTIONS: {
525 os <<
"WRITE-ACTIONS";
527 case rofl::openflow13::OFPTFPT_WRITE_ACTIONS_MISS: {
528 os <<
"WRITE-ACTIONS-MISS";
530 case rofl::openflow13::OFPTFPT_APPLY_ACTIONS: {
531 os <<
"APPLY-ACTIONS";
533 case rofl::openflow13::OFPTFPT_APPLY_ACTIONS_MISS: {
534 os <<
"APPLY-ACTIONS-MISS";
537 os <<
"type:" << (int)tfp.get_type();
540 os <<
" >" << std::endl;
542 for (std::vector<struct rofl::openflow::ofp_action>::const_iterator
543 it = tfp.actions.begin(); it != tfp.actions.end(); ++it) {
545 switch ((*it).type) {
546 case rofl::openflow::OFPAT_OUTPUT: {
547 os <<
indent(4) <<
"<action-id ACTION-OUTPUT len:" << (*it).len <<
" >" << std::endl;
549 case rofl::openflow::OFPAT_COPY_TTL_OUT: {
550 os <<
indent(4) <<
"<action-id ACTION-COPY-TTL-OUT len:" << (*it).len <<
" >" << std::endl;
552 case rofl::openflow::OFPAT_COPY_TTL_IN: {
553 os <<
indent(4) <<
"<action-id ACTION-COPY-TTL-IN len:" << (*it).len <<
" >" << std::endl;
555 case rofl::openflow::OFPAT_SET_MPLS_TTL: {
556 os <<
indent(4) <<
"<action-id ACTION-SET-MPLS-TTL len:" << (*it).len <<
" >" << std::endl;
558 case rofl::openflow::OFPAT_DEC_MPLS_TTL: {
559 os <<
indent(4) <<
"<action-id ACTION-DEC-MPLS-TTL len:" << (*it).len <<
" >" << std::endl;
561 case rofl::openflow::OFPAT_PUSH_VLAN: {
562 os <<
indent(4) <<
"<action-id ACTION-PUSH-VLAN len:" << (*it).len <<
" >" << std::endl;
564 case rofl::openflow::OFPAT_POP_VLAN: {
565 os <<
indent(4) <<
"<action-id ACTION-POP-VLAN len:" << (*it).len <<
" >" << std::endl;
567 case rofl::openflow::OFPAT_PUSH_MPLS: {
568 os <<
indent(4) <<
"<action-id ACTION-PUSH-MPLS len:" << (*it).len <<
" >" << std::endl;
570 case rofl::openflow::OFPAT_POP_MPLS: {
571 os <<
indent(4) <<
"<action-id ACTION-POP-MPLS len:" << (*it).len <<
" >" << std::endl;
573 case rofl::openflow::OFPAT_SET_QUEUE: {
574 os <<
indent(4) <<
"<action-id ACTION-SET-QUEUE len:" << (*it).len <<
" >" << std::endl;
576 case rofl::openflow::OFPAT_GROUP: {
577 os <<
indent(4) <<
"<action-id ACTION-GROUP len:" << (*it).len <<
" >" << std::endl;
579 case rofl::openflow::OFPAT_SET_NW_TTL: {
580 os <<
indent(4) <<
"<action-id ACTION-SET-NW-TTL len:" << (*it).len <<
" >" << std::endl;
582 case rofl::openflow::OFPAT_DEC_NW_TTL: {
583 os <<
indent(4) <<
"<action-id ACTION-DEC-NW-TTL len:" << (*it).len <<
" >" << std::endl;
585 case rofl::openflow::OFPAT_SET_FIELD: {
586 os <<
indent(4) <<
"<action-id ACTION-SET-FIELD len:" << (*it).len <<
" >" << std::endl;
588 case rofl::openflow::OFPAT_PUSH_PBB: {
589 os <<
indent(4) <<
"<action-id ACTION-PUSH-PBB len:" << (*it).len <<
" >" << std::endl;
591 case rofl::openflow::OFPAT_POP_PBB: {
592 os <<
indent(4) <<
"<action-id ACTION-POP-PBB len:" << (*it).len <<
" >" << std::endl;
594 case rofl::openflow::OFPAT_EXPERIMENTER: {
595 os <<
indent(4) <<
"<action-id ACTION-EXPERIMENTER len:" << (*it).len <<
" >" << std::endl;
598 os <<
indent(4) <<
"<action-id type:" << (*it).type <<
" len:" << (*it).len <<
" >" << std::endl;
611 std::vector<uint32_t> oxm_ids;
612 std::vector<uint64_t> oxm_ids_exp;
615 uint8_t *ofhu_ofp_tfpoxm;
619 #define ofh_tfpoxm ofh_ofhu.ofhu_ofp_tfpoxm
620 #define ofh_tfpoxmhdr ofh_ofhu.ofhu_ofp_tfpoxmhdr
628 uint8_t ofp_version = OFP_VERSION_UNKNOWN,
669 uint8_t* buf,
size_t buflen);
676 uint8_t* buf,
size_t buflen);
682 std::vector<uint32_t>&
683 set_oxm_ids() {
return oxm_ids; };
688 const std::vector<uint32_t>&
689 get_oxm_ids()
const {
return oxm_ids; };
694 std::vector<uint64_t>&
695 set_oxm_ids_exp() {
return oxm_ids_exp; };
700 const std::vector<uint64_t>&
701 get_oxm_ids_exp()
const {
return oxm_ids_exp; };
717 uint64_t oxm_exp_id);
733 os << dynamic_cast<coftable_feature_prop const&>( tfp );
734 os <<
indent(2) <<
"<coftable_feature_prop_oxm "
735 <<
"#oxm-ids:" << tfp.oxm_ids.size() <<
" "
736 <<
"#oxm-ids-exp:" << tfp.oxm_ids_exp.size() <<
" ";
737 switch (tfp.get_type()) {
738 case rofl::openflow13::OFPTFPT_MATCH: {
741 case rofl::openflow13::OFPTFPT_WILDCARDS: {
744 case rofl::openflow13::OFPTFPT_WRITE_SETFIELD: {
745 os <<
"WRITE-SETFIELD";
747 case rofl::openflow13::OFPTFPT_WRITE_SETFIELD_MISS: {
748 os <<
"WRITE-SETFIELD-MISS";
750 case rofl::openflow13::OFPTFPT_APPLY_SETFIELD: {
751 os <<
"APPLY-SETFIELD";
753 case rofl::openflow13::OFPTFPT_APPLY_SETFIELD_MISS: {
754 os <<
"APPLY-SETFIELD-MISS";
757 os <<
"type:" << (int)tfp.get_type();
760 os <<
" >" << std::endl;
762 for (std::vector<uint32_t>::const_iterator it = tfp.oxm_ids.begin(); it != tfp.oxm_ids.end(); ++it) {
764 switch ((int32_t)*it) {
765 case rofl::openflow::OXM_TLV_BASIC_IN_PORT: {
766 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IN-PORT >" << std::endl;
768 case rofl::openflow::OXM_TLV_BASIC_IN_PHY_PORT: {
769 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IN-PHY-PORT >" << std::endl;
771 case rofl::openflow::OXM_TLV_BASIC_METADATA: {
772 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-METADATA >" << std::endl;
774 case rofl::openflow::OXM_TLV_BASIC_METADATA_MASK: {
775 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-METADATA-MASK >" << std::endl;
777 case rofl::openflow::OXM_TLV_BASIC_ETH_DST: {
778 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ETH-DST >" << std::endl;
780 case rofl::openflow::OXM_TLV_BASIC_ETH_DST_MASK: {
781 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ETH-DST-MASK >" << std::endl;
783 case rofl::openflow::OXM_TLV_BASIC_ETH_SRC: {
784 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ETH-SRC >" << std::endl;
786 case rofl::openflow::OXM_TLV_BASIC_ETH_SRC_MASK: {
787 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ETH-SRC-MASK >" << std::endl;
789 case rofl::openflow::OXM_TLV_BASIC_ETH_TYPE: {
790 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ETH-TYPE >" << std::endl;
792 case rofl::openflow::OXM_TLV_BASIC_VLAN_VID: {
793 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-VLAN-VID >" << std::endl;
795 case rofl::openflow::OXM_TLV_BASIC_VLAN_VID_MASK: {
796 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-VLAN-VID-MASK >" << std::endl;
798 case rofl::openflow::OXM_TLV_BASIC_VLAN_PCP: {
799 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-VLAN-PCP >" << std::endl;
801 case rofl::openflow::OXM_TLV_BASIC_IP_DSCP: {
802 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IP-DSCP >" << std::endl;
804 case rofl::openflow::OXM_TLV_BASIC_IP_ECN: {
805 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IP-ECN >" << std::endl;
807 case rofl::openflow::OXM_TLV_BASIC_IP_PROTO: {
808 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IP-PROTO >" << std::endl;
810 case rofl::openflow::OXM_TLV_BASIC_IPV4_SRC: {
811 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV4-SRC >" << std::endl;
813 case rofl::openflow::OXM_TLV_BASIC_IPV4_SRC_MASK: {
814 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV4-SRC-MASK >" << std::endl;
816 case rofl::openflow::OXM_TLV_BASIC_IPV4_DST: {
817 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV4-DST >" << std::endl;
819 case rofl::openflow::OXM_TLV_BASIC_IPV4_DST_MASK: {
820 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV4-DST-MASK >" << std::endl;
822 case rofl::openflow::OXM_TLV_BASIC_TCP_SRC: {
823 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-TCP-SRC >" << std::endl;
825 case rofl::openflow::OXM_TLV_BASIC_TCP_DST: {
826 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-TCP-DST >" << std::endl;
828 case rofl::openflow::OXM_TLV_BASIC_UDP_SRC: {
829 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-UDP-SRC >" << std::endl;
831 case rofl::openflow::OXM_TLV_BASIC_UDP_DST: {
832 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-UDP-DST >" << std::endl;
834 case rofl::openflow::OXM_TLV_BASIC_SCTP_SRC: {
835 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-SCTP-SRC >" << std::endl;
837 case rofl::openflow::OXM_TLV_BASIC_SCTP_DST: {
838 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-SCTP-DST >" << std::endl;
840 case rofl::openflow::OXM_TLV_BASIC_ICMPV4_TYPE: {
841 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ICMPV4-TYPE >" << std::endl;
843 case rofl::openflow::OXM_TLV_BASIC_ICMPV4_CODE: {
844 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ICMPV4-CODE >" << std::endl;
846 case rofl::openflow::OXM_TLV_BASIC_ARP_OP: {
847 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-OP >" << std::endl;
849 case rofl::openflow::OXM_TLV_BASIC_ARP_SPA: {
850 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-SPA >" << std::endl;
852 case rofl::openflow::OXM_TLV_BASIC_ARP_SPA_MASK: {
853 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-SPA-MASK >" << std::endl;
855 case rofl::openflow::OXM_TLV_BASIC_ARP_TPA: {
856 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-TPA >" << std::endl;
858 case rofl::openflow::OXM_TLV_BASIC_ARP_TPA_MASK: {
859 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-TPA-MASK >" << std::endl;
861 case rofl::openflow::OXM_TLV_BASIC_ARP_SHA: {
862 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-SHA >" << std::endl;
864 case rofl::openflow::OXM_TLV_BASIC_ARP_SHA_MASK: {
865 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-SHA-MASK >" << std::endl;
867 case rofl::openflow::OXM_TLV_BASIC_ARP_THA: {
868 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-THA >" << std::endl;
870 case rofl::openflow::OXM_TLV_BASIC_ARP_THA_MASK: {
871 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ARP-THA-MASK >" << std::endl;
873 case rofl::openflow::OXM_TLV_BASIC_IPV6_SRC: {
874 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-SRC >" << std::endl;
876 case rofl::openflow::OXM_TLV_BASIC_IPV6_SRC_MASK: {
877 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-SRC-MASK >" << std::endl;
879 case rofl::openflow::OXM_TLV_BASIC_IPV6_DST: {
880 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-DST >" << std::endl;
882 case rofl::openflow::OXM_TLV_BASIC_IPV6_DST_MASK: {
883 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-DST-MASK >" << std::endl;
885 case rofl::openflow::OXM_TLV_BASIC_IPV6_FLABEL: {
886 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-FLABEL >" << std::endl;
888 case rofl::openflow::OXM_TLV_BASIC_ICMPV6_TYPE: {
889 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ICMPV6-TYPE >" << std::endl;
891 case rofl::openflow::OXM_TLV_BASIC_ICMPV6_CODE: {
892 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-ICMPV6-CODE >" << std::endl;
894 case rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TARGET: {
895 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-ND-TARGET >" << std::endl;
897 case rofl::openflow::OXM_TLV_BASIC_IPV6_ND_SLL: {
898 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-ND-SLL >" << std::endl;
900 case rofl::openflow::OXM_TLV_BASIC_IPV6_ND_TLL: {
901 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-ND-TLL >" << std::endl;
903 case rofl::openflow::OXM_TLV_BASIC_MPLS_LABEL: {
904 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-MPLS-LABEL >" << std::endl;
906 case rofl::openflow::OXM_TLV_BASIC_MPLS_TC: {
907 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-MPLS-TC >" << std::endl;
909 case rofl::openflow::OXM_TLV_BASIC_MPLS_BOS: {
910 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-MPLS-BOS >" << std::endl;
912 case rofl::openflow::OXM_TLV_BASIC_PBB_ISID: {
913 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-PBB-ISID >" << std::endl;
915 case rofl::openflow::OXM_TLV_BASIC_PBB_ISID_MASK: {
916 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-PBB-ISID-MASK >" << std::endl;
918 case rofl::openflow::OXM_TLV_BASIC_TUNNEL_ID: {
919 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-TUNNEL-ID >" << std::endl;
921 case rofl::openflow::OXM_TLV_BASIC_TUNNEL_ID_MASK: {
922 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-TUNNEL-ID-MASK >" << std::endl;
924 case rofl::openflow::OXM_TLV_BASIC_IPV6_EXTHDR: {
925 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" BASIC-IPV6-EXTHDR >" << std::endl;
928 os <<
indent(4) <<
"<oxm-id 0x" << std::hex << (*it) << std::dec <<
" >" << std::endl;
932 for (std::vector<uint64_t>::const_iterator it = tfp.oxm_ids_exp.begin(); it != tfp.oxm_ids_exp.end(); ++it) {
933 os <<
indent(4) <<
"<oxm-id-exp 0x" << std::hex << (*it) << std::dec <<
" >" << std::endl;
Definition: coftablefeatureprop.h:25
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coftablefeatureprop.cc:255
Definition: coftablefeatureprop.h:149
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coftablefeatureprop.cc:87
uint8_t * resize(size_t size)
Resizes allocated memory area by calling C-function realloc().
Definition: coftablefeatureprop.cc:872
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coftablefeatureprop.cc:808
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coftablefeatureprop.cc:579
Definition: openflow_common.h:176
Definition: coftablefeatureprop.h:26
Definition: openflow13.h:1337
uint8_t * resize(size_t size)
Resizes allocated memory area by calling C-function realloc().
Definition: coftablefeatureprop.cc:307
uint8_t * resize(size_t size)
Resizes allocated memory area by calling C-function realloc().
Definition: coftablefeatureprop.cc:108
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coftablefeatureprop.cc:439
Definition: coftablefeatureprop.h:608
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coftablefeatureprop.cc:409
Definition: coftablefeatureprop.h:418
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
uint8_t * resize(size_t size)
Resizes allocated memory area by calling C-function realloc().
Definition: coftablefeatureprop.cc:480
Definition: coftablefeatureprop.h:28
Definition: openflow_common.h:186
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coftablefeatureprop.cc:222
Definition: coftablefeatureprop.h:301
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coftablefeatureprop.cc:70
Definition: openflow13.h:1325
uint8_t * resize(size_t size)
Resizes allocated memory area by calling C-function realloc().
Definition: coftablefeatureprop.cc:666
Definition: openflow13.h:1349
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: coftablefeatureprop.cc:773
Definition: openflow13.h:1312
Definition: croflexception.h:27
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: coftablefeatureprop.cc:613